배움 저장소

부호가 있는 이진수 1000은 0일까? 본문

Programming Language/C++

부호가 있는 이진수 1000은 0일까?

시옷지읏 2021. 10. 19. 15:37
 

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
Comments