Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
Tags
- CS
- c언어
- 비트연산
- AI
- csharp
- 프로그래머스
- 블렌더
- boj
- 카드뉴스
- 도넛튜토리얼
- 포토샵
- 알고리즘
- 단계별로 풀어보기
- level1
- 3d스터디
- leetcode
- 블렌더튜토리얼
- blender
- blender4.0
- cs기초
- Python
- 코딩테스트
- 블렌더도넛
- 파이썬
- 3D그래픽
- Photoshop
- 단계별문제풀이
- 백준
- 자바스크립트
- 3d모델링
Archives
- Today
- Total
슬로우도파민
[C언어] 컴퓨터의 음수 표현 (2의 보수법) 본문
컴퓨터는 뺄셈을 하지 않는다.
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 |
