22018, 1/1101 회원가입  로그인  
   pjh0717
   아... 감사합니다. 그런데 결국 -128을 이진수를 표현하면....

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=19687 [복사]


-128 이 1000 0000 인가...요??

저의 돌대가리로 이해한 점은

1000 0000 msb가 1이니 이 수는 음수이고

나머지 000 0000 이 실제 숫자인데

음수 이진수(?)를 10진법으로 나타낼려면 2의 보수로 푸는데 000 0000 부분이 어째서 -128이 .... 될까요???

그리고 왜 음수가 1 더 많은 걸까요.... 하아아아아아아 어렵군

  Hit : 11122     Date : 2011/02/08 11:01



    
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