Sort:  

https://steemit.com/kr-dev/@codingman/c--1550796253790

여기 post에 가면 설명이 잘 나와 있어요.

사실 엄청 쉽게 설명해주셨는데 ^^ 제가 부족해서 그런지 몇 번 읽어봐도 잘 모르겠습니다. 좀더 공부하고 자료주신거 보고 다시 이해해봐야겠네요. ㅎㅎㅎ 감사합니다.

1의 보수는
5-3 =2 잖아요

-3 음수를 1의 보수를 해야야
5+(-3)을 만들 수 있는데 1의 보수는 그냥 0을 1로 1을 0으로 변환합니다.
3은 0000 0011 이잖아요 8421코드로 하면요.
이것은 -3음수 1의 보수면 1111 1100 이 되잖아요. 5와 이 1의 보수를 더하면 됩니다.
0000 0101 + 1111 1100 = 1 0000 0001 이 됩니다. 최상이 비트가 1이 올림이 된 상태잖아요.
그 1을 다시 최하위 비트에 더하게 됩니다.
0000 0001 + 0000 0001 = 0000 0010이 됩니다. 이 2진수값을 10진수로 변환하면 2가 나오지요.
이해하셧는지요.
그런데 만약 2-3을 할경우 2 + (-3)을 방금처럼 계산하면 최상위 비트는 올림 1이 안나옵니다. 계산해보시면 아실거에요. 최상이 비트가 0이 된다면 다시 2+(-3) = A라 할때 A를 다시 1의 보수를 취해서 나온 수 1앞에 (-)부호를 붙여 -1로 표기하면 됩니다.
최상위비트 부호 비트라고 생각하시면 돼요.

2의 보수는 1을 0으로 0을 1로 바꾸는 것은 1의 보수가 같지만 추가로 최하위 비트에 +1을 더해주는 것이 2의 보수입니다. 이 수도 더해서 나온 수가 최상위비트가 1이냐 0이냐에 따라서 계산이 1의 보수와 비슷하게 계산이 됩니다.
만약 최상위 비트가 9번째 자리에 1의 올림 수가 나오면 그 1의 수를 버리고 최종 8bit의 값을 10진수로 하면 결과 양의 숫자가 나오고 올림 수가 0이 되면 음수로 2+(-3)=A일 때 A를 2의 보수로 변환하고 앞에 음수를 붙여주면 계산이 끝납니다.

오. 그렇군요. ㅇ_ㅇ 뭔가 대단히 복잡하네요. 사람 입장에서는 쉬운? 뺄셈이 이렇게 복잡하게 돌아가다니... 신기합니다. 그런데 예전에는 뭐 때문에 이렇게 계산했는지 궁금하네요.

컴퓨터 구조 과목에서 가산기를 배울 때 대충 배우게 됩니다.
참고로 컴퓨터 전자기기는 전기신호를 주고 받잖아요. 전기 신호는 뺄셈 음수의 신호는 없어요 전기가 흐르면 1이고 전기가 흐르지 않으면 0이 되는 건 아시잖아요.
애초 전자기기는 뺄샘이란 존재하지 않고 편의상 우리가 인간언어에 가깝게 빼기를 할 뿐이죠.
두 전기 신호가 합쳐서저 나오는 bit계산의 수치 만 존재 할 뿐이죠.
AND, OR, NOT 연산처럼요.
수를 표현할 때도 0과1로 표현하기 때문에 바이트로 해서 절반은 음수라 칭하고 절반은 양수로 칭하잖아요. 이건 인간이 이해하기 위한 해석이고요 그냥 0과1로 표기될 뿐이죠.
잡이야기로 되었지만 그냥 쉽게 전기 신호로 전류가 흐르는 데 뺄셈이 없다는 걸로 이해하시면 돼요. 그래서 계산을 할 때 뺄샘이 아닐 1의 보수 2의보수의 덧셈으로 전기신호를 계산하다고 생각하시면 될 듯요.
하위 언어 계산이라고 보시면 될 듯요. 하드웨어쪽 계산으로 보면 될려나...

아 ~~~~ 비트 연산이니깐 0 1로 표현되니깐 그렇군요. 양자컴퓨터로 바뀌면 그 연산법도 바뀔지도 모르겠네요.

Coin Marketplace

STEEM 0.17
TRX 0.15
JST 0.028
BTC 57343.17
ETH 2341.96
USDT 1.00
SBD 2.35