|  |
| |
| richel |
-128은 1000 0000 맞아요 :]....
제 기억으로는, 음수는 0을 1로 1을 0 으로 반전해가지고 계산했던 것 같네요.
2진법에는 .byte 안에 128이란 양수가 나오지 않으니까,, 127이 되겠죠..?
..음.. |
2011/02/09 |
|
.Dolphin |
아오 설명을 해주고싶은데 막상할라니까 왜이리 형용하기가 힘든거지 -_-;
아오아아오아오 답답해ㅋㅋㅋㅋ |
2011/02/09 |
|
.Dolphin |
2의 보수 계산법은 반전뿐만아니라 +1을 합니다
설마 모르는건 아니겠쬬? |
2011/02/09 |
|
| $Zero |
이분의 글을 읽으면 . .
제가 알고있던것도 헷갈리게됨 . ㅠㅠ |
2011/02/09 |
|
| ggabu420 |
지금 글쓴이가 헷갈리는 것은 음수가 어떻게 나오냐는 것입니다.
제가 아래에 댓글을 길게 써서 이제 더 할 말이 없습니다만..
-128 이라는 숫자는 1바이트로 표현할 수 있는 최대의 음수 범위입니다.
그런데 왜 범위가 -127 ~ 127 이 아닐까요?
만약 범위가 위처럼 되어있다면 양수 127 은 01111111 이므로 반전후 1을 더하면 10000001 이
되어 -127 이 10000001 이 될 수 있고 거기서 -126, -125, -124 이렇게 줄여갈때마다 숫자가
1씩 올라가서 10000010, 10000011, 10000100 … 이렇게 멋지게 정리될텐데 말입니다.
그렇다면 1바이트 2진수에서 최대로 큰(2의 보수 무시하고) 수는 11111111 이지요?
이 수는 반전 후 1을 더해보면 1입니다. 즉 -1 이라는 것입니다.
지금 -127 ~ -1 까지 10000001 ~ 11111111 로 표현을 했는데, 반대로 양수에서는
00000001 ~ 01111111 까지가 1 ~ 127 입니다.
자, 여기서 8개의 비트로 표현할 수 있는 수 중 빠진게 2개가 있습니다.
먼저 0, 이건 00000000 입니다.
그리고 하나 더, 10000000 이 빠졌습니다.
그래서 이 수를 2의 보수화해보니 또 10000000 입니다.
이 수가 무엇인고 하니 2의 보수의 특성을 이용해서 10000000 + 00000001 을 해보면
당연히 10000001 이 되어 x + 1 = -127 이라는 결과가 나옵니다.
즉 이 수는 -128 이라는 것입니다.
원래 2의 보수 표현법에서 모든 수는 MSB가 1이 아닌 수에서, 1인 수로 바뀌게 됩니다.
그런데 이 수만은 예외입니다. 2의 보수를 취하든 안 취하든 항상 1입니다.
아래 댓글에서도 적었듯이 MSB가 1이고 다른 비트가 모두 0인 수는 항상 이렇게 됩니다.
사실 헷갈릴 것이 전혀 없는 것인데도 불구하고 다른 수와 다른 점이 딱 하나 있다는 점에서
(2의 보수화를 해도 부호 비트가 그대로 1)
헷갈릴 수가 있습니다. 그럴 때는 2의 보수에서 잘 들어맞는 양수와의 연산을 직접 해보시면 됩니다. |
2011/02/09 |
|
| pjh0717 |
오마이갓 전부다 이해가 됬잖아
ggabu420님... 레알감사합니다!!!!!! |
2011/02/09 |
|