[기본원리] 2진수의 음수표현법!
- 프로그래밍 정보
- 2010. 7. 11.
반응형
2010/07/10 - [Programing/기본원리] - 2진수의 의미.
2010/07/10 - [Programing/기본원리] - 컴퓨터는 2진수만 취급합니다.
2010/07/11 - [Programing/기본원리] - 재미있는 쉬프트 연산!
2진수 관련 음수표현법입니다.
2진수에서 음수를 나타내는 방법은 부호를 나타내는
최상위비트(MSB : Most Significant Bit) 를 사용하는 것인데요,
이 최상위비트를 부호비트라고 합니다.
부호비트가 0이면 양수, 1이면 음수를 나타내는 방식이죠.
예를들어 10진수 1은 2진수로 00000001 이 됩니다.
그럼 10진수 -1 은 얼마일까요?
흔히 10000001 이라고 생각하기 쉽지만 ,
실제로 10진수 -1 의 2진수는 11111111 이 됩니다.
왜냐구요?
아래 글을 잘 읽어 보시면 아하! 라고 하실껍니다 ^^;
읽기전에 손가락 한번 클릭~ >_<
고마워요 ~ Chu ~ ♥
2진수 음수계산
우선 이렇게 생각해 보죠.
1-1 = 0 입니다.
이것은 바꿔 말하면 1 + (-1) 과 똑같지요.
그렇다면 이것을 암산이 아닌,
2진수로 계산해 볼까요?
범위를 넘어서는 자리는 버려버리므로 값에 포함되지 않습니다.
이 결과식에서와 같이 -1 은 10000001 이 아니라
11111111 이라는것을 아시겠지요??ㅎ
실제 빼기 연산은 덧셈으로 ..
실제로 컴퓨터는 빼기 연산을 모릅니다.
단, 빼기 연산을 덧셈처럼 수행하지요 ! [ 1 + (-1) 처럼 ]
2진수 1은 ' 00000001 ' 이고 2진수 -1 은 ' 11111111 ' 이 됩니다.
즉, 1을 -1로 바꾸려면
0은 1로, 1은 0으로 바꾼 다음 [ 00000001 -> 11111110 ]
그런 다음 +1 을 하면 됩니다. [ 11111110 -> 11111111 ]
그런 다음 +1 을 하면 됩니다. [ 11111110 -> 11111111 ]
앞의 계산식에서 보면 1 - 1 = 0 은
2진수로 [ 00000001 + 11111111 = 100000000 ] 이 되어 버렸습니다.
9번째 자리가 넘쳐 1이 되었지만 초과한 자리는 무시하도록 되어있기 때문에 0으로 처리되지요.
어찌 되었든 1을 -1 로 바꾸는 것처럼 음수로 바꾸는 것을 보수 라고 합니다.
보수를 구하는 방법은 결국, 1은 0으로.. 0은 1로 바꾼 후 + 1 을 한다는 것입니다.
또한 구해진 음수의 검사법은 ' 어떤 2진수의 보수에 원래의 값을 더하면 0이 된다 ' 입니다.
그럼 여기서 또 하나의 문제.
연산 결과가 음수인 경우에는 어떻게 될까요?
연산 결과가 음수인 계산
이렇게 생각해 봅시다.
10진수의 2-4 는 결과가 -2 가 되지요?
그럼 2는 2진수로 ' 00000010 ' 이 되겠고, 4는 ' 00000100 ' 이 됩니다.
4는 -4 이므로 보수를 취하게 되면 -4는 ' 11111100 ' 이 되지요.
결국 2-4는 2진수 연산에선 [ 00000010 + 11111100 ] 이 됩니다.
위와같은 연산이 이루어 지는 것이지요 ~
결과값의 최상위 자리가 1이므로 음수가 됩니다.
즉, 결과값이 음수인 경우가 됩니다.
그렇다면 결과로 나온 ' 11111110 ' 은 얼마일가요?
위에선 이미 -2 라고 공표해 버렸지만요 ^^;
음수 결과값을 알아내기 위한 방법 중 재미있는 것은
보수의 보수를 취하면 된다는 것입니다.
자, 1의 보수는 -1 이라고 했습니다.
그렇다면 -1의 보수는 ? 1이 되겠죠 .
이것을 결과로 나온 ' 11111110 ' 에 대입하여 보수로 표현해 보면 ' 00000010 ' 이 됩니다.
이것을 10진수로 나타내면 2 가 되므로, ' 11111110 ' 은 -2 라는 사실을 알수가 있지요 .
음수를 취급하는 자료형
프로그래밍 언어에서의 자료형은 음수를 취급할 수 있는 것과 취급하지 않는것이 있습니다.
예를들면 short 형은 음수를 취급할 수 있고 unsigned short 형은 음수를 취급하지 않지요.
short 자료형은 2Byte 크기를 사용하므로 2의 16제곱, 즉 65,536 개의 값을 표현할 수 잇는데요,
값의 범위가 각각 다릅니다.
- short 형은 -32,768 ~ 32,767 까지,
- unsigned short 형은 0 ~ 65,535 까지.
이것의 차이는 최상위비트를 부호비트로 볼 것인지, 값으로 볼 것인지에 대한 차이입니다.
음수 사용이 가능한 자료형에서
양수의 범위는 0 ~ 32,767 이고,
음수의 범위는 -1 ~ -32,768 까지 입니다.
즉, 0이 양수의 범위에 포함되기 때문에 음수가 하나 더 많아지는 것이지요.
실제 0은 양수도 음수도 아닙니다.
하지만 부호비트 라는 녀석 덕분에 0은 양수에 포함되게 되었습니다 ^^
반응형