5 - 3 의 뺄셈 연산은
5 + (-3) 의 덧셈 연산으로 바꾸어 버린다.
그래서 이번 글에서는 기계어로는 음수를 어떻게 표현하는지를 알아보려고 한다.

이번엔 이해해보자-!
일단 컴퓨터는 정수를 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의 보수법을 다시 한 번 알아보았다.
이제 컴퓨터 언어로 음수가 뭔지도 이해할 수 있게 되었다!!
| [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 |