2011-02-09 7 views
5

데이터 유형 범위에 대해 생각 중이던 질문이 생깁니다. 우리가 서명 알고있는 문자의 범위는 내가 가진 -128 127에서 인 127 제공 방법, 즉 0,111,111 = 127부호가있는 2의 보수 산술

그러나 -128 온다 어떻게 얻을 수 있을까? 우리가 서명 비트를 얻으면 우리는 11111111을 얻습니다. 어떻게 그 값이 -128입니까?

+0

FWIW, 0111111 = 63. –

답변

0

음수는 부호 비트가 1로 설정되어있다; -128은 부호 비트가 설정되었지만 다른 비트가없는 값입니다 (즉, 음수가 가장 작음). -128의 이진 표현은 10000000입니다. 다른 데이터 길이의 경우 2의 보수 중 가장 작은 음수는 항상 올바른 0의 수에 대해 1000...입니다.

8

대부분의 경우 컴퓨터는 부호가있는 정수를 나타 내기 위해 의 2의 보수을 사용합니다.

way 2의 보완 작업은 가능한 값이 0에서 MAX_VALUE, MIN_VALUE, 0 등으로 거대한 루프에 있음을 의미합니다.

따라서 최소값은 최대 값 +1 - 01111111 = 12710000000 = -128입니다.

부호없는 산술과 정확히 동일하게 동작하는 좋은 속성이 있습니다. -2 + 1을 수행하고 싶다면 부호없는 추가와 동일한 하드웨어를 사용하여 11111110 + 00000001 = 11111111 = -1을 사용하고 있습니다.

로우 엔드에 추가 값이있는 이유는 상위 비트 세트가있는 모든 숫자가 음수가되도록 선택한다는 것입니다. 즉, 0은 양수 값에서 값을 취합니다.

+1

"11111111"이 표현 가능한 최소 수이고 실제로 -127 인 표현을 지적 할 가치가 있습니다. 이것은 "부호 크기"형식입니다. 부호 크기에는 '+ 0'과 '-0', 각각 '00000000'과 '10000000'의 두 개의 0이 있습니다. – caf

+0

@Asad Hanif, 도움이 더 필요하십니까? 이 답변이나 다른 답변이 도움이되었고 질문에 대한 답변을 얻은 경우 해당 답변을 수락하는 것을 잊지 마십시오. 또한 [대답이 "받아 들여지는 경우"(https://meta.stackexchange.com/help/accepted-answer) "란 무엇을 의미합니까? [중요한 이유는 무엇입니까] (https://meta.stackexchange.com/help/why-vote)? –

0

간단한 생각은 01111111부터 시작하여 줄 바꿈 될 때까지 1을 계속 유지하는 것입니다. 이전 값은 가장 작은 음수 값입니다. 표준 "borrow"기술을 사용하여 00000000에서 1을 뺀 것은 실제로 11111111을 산출하며 이는 -1에 대한 2 진 표현입니다. 우리는 -10000000, 즉 -128을 뺀 값을 빼고, 더 한 값을 빼면 01111111이 다시 생깁니다.