보수(complement)로 계산

# 보수(complement, 보충해주는 수)를 사용해서 계산하기
# 1의 보수(one's complement), 모든 비트 반전
ex) 10(1010) - 3(0011) = 7(0111)
 1010(10)   
+1100(3에 대한 1의 보수,12)
-----
10110 
맨앞 캐리 발생한 경우 캐리는 버리고 +1
 0110
+   1
-----
 0111 => 7

ex) 3(0011) - 10(1010) = -7(1111)
-10 의 음수 MSB(Most Significant Bit)은 제외하고 계산
 0011
+0101(10에 대한 1의 보수)
-----
 1000
맨앞 캐리가 발생하지 않으면, 1의 보수로 변경하고 -음수 설정
 0111 => MSB 음수(1)로, => 1111


# 2의 보수(two's complement), 1의 보수 +1
ex) 10(1010) - 3(0011) = 7(0111)
 1010(10)   
+1101(3에 대한 2의 보수,12)
-----
10111
맨앞의 캐리는 버린다. => (0111)

ex) 3(0011) - 10(1010) = -7(1111)
-10 의 음수 MSB(Most Significant Bit)은 제외하고 계산
 0011
+0110(10에 대한 2의 보수)
-----
 1001
맨앞 캐리가 발생하지 않으면, 2의 보수로 변경하고 -음
 0110
+   1
-----
 0111, => MSB 음수(1)로, => 1111


# 2의 보수를 사용하는 이유
양수는 보수를 취하지 않는다. +0(0000) => 0000 이다.
음수의 경우 보수를 취해야 하는데,
1의 보수의 경우
-0이 1111로 표현, -0(1111), 맨앞 부호 비트를 버리면 (111) 도 -0이 된다.

2의 보수의 경우
-0(1000) => (1111) + (1) = (10000), 맨앞 부호 비트 버리면 (000)이 -0이 된다.

2보의수는 -0,+0을 하나로 표현돼 저장공간을 1의보수에 비해 1개더 사용할 수 있다.

comments:

댓글 쓰기