1. 부호 크기 표현 (Sign and Magnitude Representation)
음수를 표현하는 가장 직관적이고 단순한 방법이다. 부호 비트가 1이면, 나머지 값 비트들이 표현하는 양수값에 -를 붙이면 된다. 따라서 가장 큰 양수와 가장 작은 음수의 절대값이 같다.
예) 1010
최상위 비트 1은 부호 비트로 음수를 나타내고 나머지 값 비트 010은 양수 2이기 때문에 -를 붙여서 -2가 된다.
최상위 비트 1은 부호 비트로 음수를 나타내고 나머지 값 비트 010은 양수 2이기 때문에 -를 붙여서 -2가 된다.
하지만 이 방법에서는 아래와 같이 0이 +0, -0으로 두개가 나오게 단점이 있다.
0000 = 0
1000 = 0
1000 = 0
2. 1의 보수 표현 (1s' Complement Representation)
부호 비트가 1이고 값 비트의 개수가 n이라면, 해당 비트열은 다음과 같이 표현된다.
(값 비트에 의한 양수값) - (2^n -1)
위의 수식보다 더 간단하게 해석하는 방법은 부호 비트가 1일 경우 모든 비트를 반전시켜서 나오는 양수값에 -를 붙여서 표현하는 것이다.
예) 1001 = -6
부호 비트가 1이기 때문에 모두 반전 시켜서 0110을 만든다. 그리고 이 값에 -를 붙여서 표현하면 -6이 된다.
부호 비트가 1이기 때문에 모두 반전 시켜서 0110을 만든다. 그리고 이 값에 -를 붙여서 표현하면 -6이 된다.
1의 보수 표현에서도 0이 +0과 -0으 두 가지로 표현되는 문제가 있다.
0000 = 0
1111 = 0
1111 = 0
3. 2의 보수 표현 (2' s Complement Representation)
부호 비트가 1이고 값 비트의 개수가 n이라면, 해당 비트열은 다음과 같이 표현된다.
(값 비트에 의한 양수값) - 2^n
더 간단한 해석 방법은 앞에서 설명한 1의 보수 표현을 구한 후, 그 결과에 1을 더하는 것이다.
예) 1001 = -7
부호 비트가 1이기 때문에 모두 반전 시켜서 0110을 만든다. 그리고 이 값에 1을 더해서 0111을 만들고 -를 붙여서 표현하면 -7이 된다.
부호 비트가 1이기 때문에 모두 반전 시켜서 0110을 만든다. 그리고 이 값에 1을 더해서 0111을 만들고 -를 붙여서 표현하면 -7이 된다.
2의 보수 표현에서는 0을 표현하는 방법이 하나이다. 그래서 부호 크기 표현과 1의 보수 표현 방법보다 음수를 하나 더 표현 할 수 있다.
0000 = 0
1111 = -1
1111 = -1
4. 정리
현재 대부분의 구현에서 여러 이점 때문에 2의 보수 표현을 사용하고 있다. 그러나 아직 부호 크기 표현이나 1의 보수 표현을 사용하는 시스템도 남아 있고, 또 이들 역시 장점이 있기 때문에 C 표준에서는 3가지 방법을 모두 사용할 수 있도록 해주고 있다. 예를 들어 16비트 short int의 최소값은 2의 보수 표현에서는 -32768이지만, 1의 보수 표현에서는 -32767이므로 표준은 -32767을 최소값으로 채택했다.
<관련글>
보수 표현: http://superkkt.com/287
무부호 정수형의 모듈로 연산: http://superkkt.com/285

comments
comments rss (+댓글 쓰러가기)