12. 부호있는 정수 표현 – 부호비트 필드

질문) 부호있는 정수는 어떻게 표현할까? 대답1) 부호있는 정수를 표현하는 방법은 크게 세 가지가 있어. 부호비트필드 방식, 1진 보수 방식, 2진 보수 방식이 있지. 대답2) 부호비트 필드 방식이 제일 간단하지. 맨 앞 비트가 1이면 음수, 0이면 양수야.

메모리에 부호있는 정수를 표현하는 방법은 여러가지 방법이 있어요.
그 중에 대표적인 방법이 부호비트 필드 방식, 1진 보수 방식, 2진 보수 방식이 있죠.
C언어의 정수 형식은 2진 보수 방식을 사용하고 있어요.
이제 이 세가지 방법을 알아봅시다.

먼저 부호 비트를 이용하는 방법을 알아볼게요.
부호비트 필드 방식에서는 첫 번째 비트를 부호비트로 사용하는 방식이예요.
첫 번째 비트가 1이면 부호있는 정수이고 0이면 부호없는 정수인 것이죠.
그리고 나머지 비트는 크기를 나타내요.

부호비트필드 방식에서는 맨 앞 비트는 부호비트이고 나머지는 크기

예를 들어 8비트의 메모리에 10010001 값이 들어있다면 첫번째 비트가 1이므로 부호있는 정수예요.
그리고 나머지 비트인 0010001이 크기를 나타내죠.
이진수 0010001은 16+1 = 17 이므로 10010001은 -17이예요.

8비트의 메모리에 00010001 값이 들어있다면 첫번째 비트가 1이므로 부호없는 정수예요.
그리고 나머지 비트인 0010001은 크기를 나타내죠.
따라서 00010001은 17이예요.

8비트 메모리에 10000000 값이 있을 때 부호있고 크기가 0인 -0이예요.
그리고 00000000 또한 0이죠.
이처럼 부호비트 필드 방식에서는 -0과 0 두 개가 있어요.
이는 실제 같은 값인데 메모리의 내용이 서로 달라서 처리하는 비용이 들어요.
C언어에서 정수 형식의 값을 표현할 때 부호비트 필드 방식을 사용하지 않는 이유랍니다.

◈ 기본 연습
1. 8비트의 메모리에 10110111값이 있을 때 부호비트 필드 방식일 때 의미하는 값을 계산하시오.

2. 8비트의 메모리에 00110111값이 있을 때 부호비트 필드 방식일 때 의미하는 값을 계산하시오.

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