계속 누가 울부 짖어서 최대한 쉽게 설명해볼게
그 전에 첫 번째 비트가 LSB(가장 오른쪽에 위치한 비트)를 뜻하는거라고 약속하자.
쉽게 말하면 2의 보수(2's complement)라는게 각 자리(비트)를 더해서 0으로 만들도록 보충해주는 수를 말하는거야
예를 들면 4비트 2진수 0110의 각 자리수를 더해서 0000으로 만들어주는 비트는 1010이지
맨 오른쪽 비트(LSB)부터 차례대로 계산해보면
0 + 0 = 0
1 + 1 = 0 / 올림수(carry)발생
1 + 0 + 1(carry) = 0 / carry 발생
0 + 1 + 1(carry) = 0 / carry 발생
그리고 새로 올라운 carry가 5번째 비트를 1로 채우게 되지
이게 한정된 비트수를 나타내는 곳에서 큰 의미가 있는데
예를 들어 3 비트 만 나타낼 수 있는 시스템에서 010의 2의 보수는 110이 돼
010 +110을 더하면 1000이 되지. 즉, 세 비트가 모두 0이되고 네 번째 비트가 1이되지
그런데 이 시스템은 3 비트낼 수 있다고 그랬지? 그래서 맨 왼쪽 비트 1은 날아가고 000만 나타낼 수 있어
네 번째 비트 1을 표기할 수 없어서 0을 나타내게 된다는게 핵심이야
정리하자면 한정된 자리수를 가지고, 기수(진법)가 N일 때, A와 A의 N의 보수를 더하면 0이 된다는거지, 이걸 폰 노이만이 N의 보수를 음수로 표기하면
절대값이 같고 부호가 다른 반수 관계에 있는 정수(예를 들어 3과 -3)를 더하면 0이 되는 계산을 구현할 수 있겠다고 생각해서 2의 보수를 음수로 표기하게 된거야
마지막으로 팁 하나 적어줄게
2의 보수로 표기된 음수 값을 빠르게 읽는 법을 알려줄게
부호 있는(signed) 8비트 정수에서 음수 1111 1001의 값을 바로 읽으려면 0이 있는 자릿수를 더해서 계산한 뒤 +1을 하고 -를 붙이면 돼
2^1의 자리가 0이니까 2
2^2의 자리가 0이니까 4
더하면 6이지? +1하면 7
여기에 - 붙여버려 그러면 -7이 돼
천재냐 ㅇㅅㅇㅋㅋ
홀리쉣
헐 나를 이해시키다니 ㅇㅅㅇ
폰노이만은 ㄹㅇ 천재인듯
오랜만에 유익글 개추
학식갤 인증하듯이 념글 프리패스 해보렸농ㅋㅋ - dc App
전공 학식이면 이런거 다 배우지 국비갤이 맞는 표현임
학식들이 1시간전부터 2의보수 질문글 죤나올려대더라 ㅇㅅㅇㅋㅋ
아 ㅋㅋㅋㅋ - dc App
이상이 2의 보수의 장점이고 왜 다른 방식 많은데 굳이 2의 보수 쓰냐면 연산 구현 등이 간단해서 그럼 ㅇㅅㅇ 다른 방식으로는 1s' comp, pbiased, balanced ternary, negative base 등 많은데 아무도 관심없고 모름 ㅇㅅㅇ
상위 1퍼 메타몽 ㅇㅅㅇ
애옹쓰애옹쓰~~
컴퓨터 구조에서 배우는건가 보구나 싱기하군 애옹애옹~
닉 ㅇㅈ
애옹? 애옹 ㅜ.......ㅜㅜ
이거 전자과 가도 배우지 않냐 전자계산기 만들기 같은걸로
파스칼 계산기에서 아이디어 얻었다던데 ㅇㅅㅇ
형!!!!!!!!!!!!!!!!!!!형!!!!!!!!!!!!!!!!!!!형!!!!!!!!!!!!!!!!!!!형!!!!!!!!!!!!!!!!!!!형!!!!!!!!!!!!!!!!!!!형!!!!!!!!!!!!!!!!!!! 집에와서 올린다..고마워.ㅠㅠㅠ 진짜 다 풀리네,, 책의 문장 맥락 그 사이를 방황하고 있었는데
여초말투 역겹고
각 자리(비트)를 더해서 0으로 만들도록 보충해주는 수를 말하는거야...,, 이게 핵심이구나,,,, 보수라고 해가지고 사전찾아보고.. 사전에는 어떤수를 만들기 위해 도와주는 수라고 하고 예를들어 10에서 6이 있다면 4가 있어야지 도와주는수라는 개념이라는걸 가지고... 접근했는데,, 왜 2의 보수형태로 저장된다는건가... 거기서.. 자꾸 삐꾸가 있었는데..
이게 바로 과외하던 저력인가ㄷ
와 이거 1학년때 배우는거아님? 머리싸매다가 유레카 했던 기억나네
음수 읽는 법을 완벽하게 더 쉬운 방법으로 알려주자면... (1) 비트반전 시킨다. (2) +1 시킨다. (3) 읽을 때 숫자는 그대로 해서 음수로 읽으면 된다.
본문에 써진거랑 다를게 없잖아 ㅋㅋ
본문 음수읽는법이 훨씬 쉬운거같은데 물론 너가말한게 보통하는방법이지만
잘배웠다 - dc App
음~ 수