컴퓨터가 음수와 양수를 표현하는 방법, 2의 보수

보수 (complement)

컴퓨터가 양수와 음수를 표현 할 때 쓰는 방식이다 .

정확하게는 보충해주는 수 라는 의미이며

대학교에서 전자전기 계열 전공을 듣는다면 디지털 논리회로라는 과목에서 잠깐 나오는 주제이다.

2진법

우선 보수를 알기 위해선 2진법을 알아야 하는데 계산식은 단순하다

예를 들어 7의 숫자를 2진법으로 나타내면

7 / 2 = 3 ...1
3 / 2 = 1 ... 1
1/ 2 = 0 ... 1
이다 그렇다면

2^0 + 2^1 + 2^2 = 1 + 2 + 4 = 7

또는 9의 숫자를 2진법으로 나타내면

9 / 2 = 4 ... 1
4 / 2 = 2 ... 0
2/2 = 1 ... 0
1/2 = 0 ... 1

2^0 + 2^3 = 1 + 8 = 9

나머지가 1일 경우 2^0 부터 숫자를 더하는 방식으로 2진법을 구할 수 있다 .

2의 보수

위에서 구한 2진법의 수를 보수를 통해 변환 시켜야 하는데

방법은 1 의 숫자를 0으로 0의 숫자를 1로 뒤집어 주면 보수가 진행이 되며
여기서 + 1 을 더하게 되면 2의 보수가 된다

우선 비트를 4칸으로 준 뒤

7의 경우
0111 -> 1000 +1 = 1001

9의 경우
1001 -> 0110 +1 = 0111

라는 값을 얻으면 2의 보수를 나타낸 값이 나온다.

2의 보수의 의미

앞에서 구한 7은 양수형일 때 0111 이고 음수형일 때 1001 이다
둘을 더하게 되면 2 = 0이되며 자릿수가 올라가므로
10000이 나오게 되며

9 또한 1001 + 0111 = 10000이 되며 최대 비트인 4를 넘어가게 된다.

가장 앞자리 비트 수가 1이 되면 음수를 표현하고 0이 되면 양수를 표현하게 된다는 것을 알 수 있다.

컴퓨터는 이러한 방식으로 음수를 나타내기 때문에
큰 자료형이 작은 자료형으로 들어가게 될 경우 (ex: int가 byte에 들어간다던가...)
오버플로우가 발생하여 엉뚱한 음수의 숫자가 출력이 되는 경우가 많이 발생하게 된다.

'CS' 카테고리의 다른 글

[WEB] CORS 에러란 ? ..  (0) 2025.02.27
지역 변수와 멤버 변수  (1) 2024.01.21
프로그래밍 식별자 표기법 5가지  (0) 2024.01.18