14. 부호있는 정수 표현 – 2진 보수 방식

A) C언어에서 부호있는 정수를 2진 보수 방식으로 사용한단다. 2진 보수는 1진 보수를 취한 후에 1을 더해주지. B) 그럼 0111011의 1진 보수가 1000100이므로 2진 보수는 1000101이겠네요.

마지막으로 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진 보수 방식을 사용하고 있어요.

2진 보수 방식에서는 부호비트가 1일 때 음수이고 1진 보수를 취한 후에 1을 더한 값이 크기예요.

◈ 기본 연습
1. 8비트의 메모리에 10110111값이 있고 2진 보수 방식일 때 의미하는 값을 계산하시오.

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

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