13. 부호있는 정수 표현 – 1진 보수 방식

이번에는 1진 보수를 이용하여 부호있는 정수를 표현하는 방법을 알아볼게요.

1진 보수를 이용할 때도 첫번째 비트가 0일 때는 부호없는 정수이며 나머지 비트는 크기예요.
하지만 첫번째 비트가 1일 때는 음의 정수를 나타내며 나머지 비트를 1진 보수를 취한 값이 크기를 나타내죠.

먼저 2진수를 1진 보수를 취하는 예를 들어볼게요.
2진수를 1진 보수로 바꿀 때는 각 비트를 0은 1로 바꾸고 1은 0으로 바꾸세요.
예를 들어 2진수 01011010을 1진 보수를 취하면 10100101이예요.

8비트의 메모리에 10010001 값이 들어있다면 첫번째 비트가 1이므로 부호있는 정수예요.
그리고 나머지 비트인 0010001를 1진 보수를 취하면 1101110이죠.
따라서 크기가 64+32+8+4+2 이므로 110이예요.
1진 보수 방식에서 메모리 10010001은  -110입니다.

8비트의 메모리에 00010001 값이 들어있다면 첫번째 비트가 0이므로 부호없는 정수예요.
그리고 나머지 비트인 0010001은 크기를 나타내죠.
따라서 00010001은 17을 의미하며 부호비트 필드 방식과 같아요.

8비트의 메모리에 00000000값이 있을 때 부호없는 정수 0을 의미하죠.
또한 8비트의 메모리에 11111111일 때 첫번째 비트가 1이므로 나머지 자리를 1진 보수를 취하면 0000000이므로 -0이예요.

1진 보수를 이용하는 방법도 부호비트 필드 방법과 마찬가지로 부호 없는 0과 부호 있는 0이 존재하죠.
이러한 이유로 C언어에서는 부호있는 정수를 표현할 때 부호비트 필드 방식이나 1진 보수 방식을 사용하지 않아요.

2진수와 10진수 표현
2진수와 10진수 표현

◈ 기본 연습 (정답 바로가기)
1. 8비트의 메모리에 10110111값이 있을 때 1진 보수 방식일 때 의미하는 값을 계산하시오.

2. 8비트의 메모리에 00110111값이 있을 때 1진 보수 방식일 때 의미하는 값을 계산하시오.

3. 8비트의 메모리에 10진수 -116을 1진 보수 방식으로 나타내시오.