배움 저장소
부호가 있는 이진수 1000은 0일까? 본문
Why is 1000 = -8 in signed 4-bit binary?
I was wondering why 1000 in signed 4-bit binary notation is equal to -8 in decimal. From my understanding, the 1 simply states that sign (1 being negative and 0 being positive) it has no real decimal value. I have read that it is not possible to correctly
www.physicsforums.com
Signed int의 첫 번째 비트는 부호를 나타내고 나머지 비트는 숫자를 나타낸다.
Signed Int의 양수
4비트로 숫자를 표현해보자 양수는
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
Signed Int의 음수는 어떻게 표현할까? 2의 보수표현법
음수는 2의 보수 표현법으로 표기한다. -1을 예로 들어 보자 -1을 구하기 위해서 1을 먼저 구한다.
0001 = 1이다. 여기서 -1을 구하려면
1110 모든 수를 반전 시키고
+0001 여기에 1을 더한다
1111 이 값을 -1이라고 가정한다면
-1 + 1 = 0이므로
0001 = 1
+1111 = -1
10000 = 0
이때 맨 앞 1은 저장되지 않으므로 -1 + 1 = 0이 성립한다.
Signed Int의 음수
-1 = 1110 + 1 = 1111
-2 = 1101 + 1 = 1110
-3 = 1100 + 1 = 1101
-4 = 1011 + 1 = 1100
-5 = 1010 + 1 = 1011
-6 = 1001 + 1 = 1010
-7 = 1000 + 1 = 1001
이때 1000을 사용하지 않았다. 1000은 8 혹은 -8을 사용할 수 있을텐데
첫 번째 비트가 부호를 의미하므로 1000은 -8으로 사용할 수 있다.
이를통하여 음수가 양수보다 하나 더 많은 수를 담을 수 있음을 확인할 수 있다.
int main(){
cout<< INT_MAX << endl;
cout<< INT_MIN << endl;
}
추가
printf("Int_min + Int_min=%d\n",INT_MIN+INT_MIN);
printf("Int_max + Int_max=%d\n",INT_MAX+INT_MAX);
예를 들어보자. 첫 bit는 부호값을 나타내고 나머지 두 bit로 숫자를 나타내는 경우이다.
0 1 1 3bit 양수 최대값
+ 0 1 1 3bit 양수 최대값
1 1 0 = -2
1 0 0 3bit 음수 최소값
+ 1 0 0 3bit 음수 최소값
1 0 0 0 = 0 0 0 = 0
'Programming Language > C++' 카테고리의 다른 글
[홍정모의 따라하며 배우는 C++] 0. 시작해봅시다. (0) | 2021.12.10 |
---|---|
[C++] Template (0) | 2021.11.13 |
[C/C++] Left Shift and Right Shift (0) | 2021.11.11 |
[C++] unique_ptr, shared_ptr, weak_ptr (0) | 2021.11.07 |
[C++] Iterator (0) | 2021.10.09 |