상세 컨텐츠

본문 제목

[C언어] 컴퓨터의 음수 표현 (2의 보수법)

개발기록/Computer Science

by 도리(Dory) 2025. 11. 27. 18:15

본문

컴퓨터는 뺄셈을 하지 않는다.

 

5 - 3 의 뺄셈 연산은

 

5 + (-3) 의 덧셈 연산으로 바꾸어 버린다.

 

그래서 이번 글에서는 기계어로는 음수를 어떻게 표현하는지를 알아보려고 한다.

 

 

 

 

집중집중

 

 

2의 보수법

 

이번엔 이해해보자-!

 

 

일단 컴퓨터는 정수를 2진수로 바꾸어서 나타낸다는 것 까지는 알고 있다.

 

다음은 0부터 7까지를 2진수로 나타낸 표이다.

 

10진수 2진수
7 0111
6 0110
5 0101
4 0100
3 0011
2 0010
1 0001
0 0000

 

 

여기서 음수를 나타내고자 할때,

부호 역시 +, - 의 두 가지 이므로, 가장 왼쪽의 비트를 써서 부호를 나타내야겠다고 생각한다.

 

양수는 0

음수는 1

 

그렇게 맨 앞을 채우면...

 

10진수
(양수)
2진수 10진수
(음수)
2진수
7 0111 -7 1???
6 0110 -6 1???
5 0101 -5 1???
4 0100 -4 1???
3 0011 -3 1???
2 0010 -2 1???
1 0001 -1 1???
0 0000 -0 ????

 

 

이 때, 7을 예로 들어보면

 

7 + (-7) = 0 이 되어야 하므로

이진수를 놓고 봤을 때

 

    0  1  1  1

+  1  ?  ?  ?

-----------------

    0  0  0  0

 

의 결과를 만들려면

 

-7은 1001로 표현되어야 한다. 

 

즉, 7을 나타내는 이진수인 0111의 각자리를 바꾼뒤 1을 더한 수(2의 보수)인 1001이 그 수의 음수가 된다.

 

10진수
(양수)
2진수 10진수
(음수)
2진수
7 0111 -7 1001
6 0110 -6 1010
5 0101 -5 1011
4 0100 -4 1100
3 0011 -3 1101
2 0010 -2 1110
1 0001 -1 1111
0 0000 -0 0000

 

 

음수를 표현하는 다른 방법들도 있었겠지만,

 

무엇보다도 2의 보수법의 장점

0 을 같은수로 표현할 수 있다는 것이다.

 

이렇게 계속 봐도 이해 안되던 2의 보수법을 다시 한 번 알아보았다.

이제 컴퓨터 언어로 음수가 뭔지도 이해할 수 있게 되었다!!

'개발기록 > Computer Science' 카테고리의 다른 글

[C언어] 변수  (0) 2025.11.28
[C언어] 컴퓨터의 실수 표현  (2) 2025.11.28
[C언어] 비트(bit)와 정수 표현  (0) 2025.11.27
나의 첫번째 C++ 프로그램  (2) 2024.02.13
C++ 컴파일 과정  (1) 2024.02.13

관련글 더보기