메모리에 부호있는 정수를 표현하는 방법은 여러가지 방법이 있어요.
그 중에 대표적인 방법이 부호비트 필드 방식, 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을 부호비트 필드 방식으로 나타내시오.