2014-02-22 2 views
0

우리가 알고 있듯이 char의 범위는 -128에서 127입니다.숯의 범위에 관한 혼동

: 2의 -128의 칭찬과 128의 이진은

10000000

문자의 범위가 127-128하지만 128을하지 -127입니다 왜 인 동일합니다.
int의 경우와 같이 128-128은 모두 다릅니다.

+1

char의 범위는 항상 -128에서 127이 아닙니다. C 표준에서 8 비트 또는 그 이상의 비트가 있다고 말하는 부분을 할인합니다. 부호가 있거나 부호가 없을 수 있습니다. 아마도 당신은 int8_t를 의미했을까요? –

답변

4

에서 동일한 문제가 발생한다. 그래서 가장 큰 양수

01111111 = 127 

이며, 가장 작은 음수 같은 일이 int에 대한 발생

10000000 = -128 

이지만, 그 범위는 훨씬 더 크다. 가장 큰 긍정적 인 INT는

01111111 11111111 11111111 11111111 = 2147483647 

이며, 가장 작은 부정적인 INT는 당신이 볼 수 있듯이, 두 경우 모두, 가장 작은 음의 가장 큰 양의 1보다 더 많은입니다

10000000 00000000 00000000 00000000 = -2147483648 

입니다.

궁금한 점이 있으십니까? 부호 비트 이외의 비트 수가 같은 경우 왜 양수가 음수보다 더 많습니까? 왜냐하면 당신은 0으로 계산되지 않기 때문입니다. 상위 비트에는 0이 있으므로이 표기법에서는 양수로 간주됩니다. 이것을 포함 시키면, 128 개의 음수 문자와 128 개의 음수가 아닌 문자가 있으며, 모두 동일하게 균형을 이룹니다. 노

+0

예를 들어'4294967234', 이진수는'1111111111111111111111111111000010'입니다. 상위 비트는'1' 이니, 어떻게 긍정적입니까? – zee

+0

서명되지 않은 int입니다. 서명 된 int를 말합니다. – Barmar

+0

이거나 길이가 64 비트 인 'long long'입니다. – Barmar

0

문자는 8 비트입니다. 따라서 -128과 128의 비트 패턴은 처리 할 8 비트가있을 때 동일합니다. (부호 비트 무시)

이제 int. MSB가 -128이 아니라 플랫폼에 따라 더 큰 수이기 때문에 더 많은 비트가 있습니다.

그것은 높은 차수 비트가 1 일 때마다 숫자가 음수 인 "높은"

수의 보수 표시법
0

봐 128

10000000 

입니다 그러나 기본적으로 문자는 부호 비트로서 첫 번째 비트 컴파일러 취급을 체결하고 처리합니다. 부정적인 및 (MSB가 1이기 때문에) 그 2S가

2s complement is 
01111111 
     +  1 
10000000 

그래서 보완 계산 - 여기서

010000000 

MSB를 해석하는 9 개 비트를 고려할 128 +128 컴파일러를 저장하기 저장되어있는 양수로 0 일 때.그러나 크기가 9 비트 인 이유는 char가 +127까지만 수용 할 수있는 이유를 보여줍니다. 그리고 우리가 +128을 저장하려고한다면 위에 설명 된대로 -128이 저장됩니다.