마지막으로 C언어에서 사용하는 2진 보수 방식을 알아봅시다.
2진 보수를 이용할 때도 첫번째 비트가 0일 때는 다른 방법과 같아요.
다른 부분은 첫번째 비트가 1일 때 부호있는 정수를 나타내고 나머지 비트를 2진 보수를 취한 값이 크기로 판단한다는 것이죠.
2진수를 2진 보수를 취할 때는 1진 보수를 계산한 후에 1을 더합니다.
예를 들어 8비트의 메모리에 10010001 값이 들어있다면 첫 번째 비트가 1이므로 부호있는 정수죠.
그리고 나머지 비트인 0010001를 1진 보수를 취하면 1101110이예요.
2진 보수는 1진 보수를 계산한 값에 1을 더하므로 11011111이죠.
따라서 크기가 64+32+8+4+2+1 이므로 111이며 부호가 있어서 -110입니다.
그리고 8비트의 메모리에 00010001 값이 들어있다면 첫 번째 비트가 1이므로 부호없는 정수예요.
나머지 비트인 0010001은 크기를 나타내어 17을 의미해요.
이것은 다른 방식과 차이가 없죠.
2진 보수 방식에서 8비트(1바이트)로 표현할 때 01111111이 제일 큰 정수이고 10000000이 제일 작은 정수예요.
2진 보수 방식을 사용하면 하나의 0만 있어서 연산 처리가 쉬워요.
이러한 이유로 C언어에서는 2진 보수 방식을 사용하고 있어요.
◈ 기본 연습 (정답 바로가기)
1. 8비트의 메모리에 10110111값이 있고 2진 보수 방식일 때 의미하는 값을 계산하시오.
2. 8비트의 메모리에 00110111값이 있고 2진 보수 방식일 때 의미하는 값을 계산하시오.
3. 8비트의 메모리에 10진수 -116을 2진 보수 방식으로 나타내시오.