Language/Java

[ JAVA ] 음수의 2진 표현 - 2의 보수법

Suzz 2022. 1. 16. 18:15
728x90

☆ 음수의 2진 표현 구하기 ☆

1. 음수의 절대값을 2진수로 변환

2. 1에서 구한 2진수의 1을 0으로 0은 1로 변환 (1의 보수 구하기)

3. 2의 결과에 1을 더한다 (1의 보수 + 1)

 


어떤 수의 'n의 보수' : 더했을 때 n이 되는 수

ex) 7의 '10의 보수' = 3 / 3의 '10의 보수' = 7  -> 3과 7은 10의 보수 관계에 있다

 

 

'2의 보수 관계' : 더해서 2가 되는 두 수의 관계

ex) 10진수 2 = 2진수 '10(2)' / 2진수 '10(2)' = 자리올림이 발생하고 0이 되는 수

 

-> '2의 보수 관계'에 있는 두 2진수를 더하면 '(자리올림이 발생하고) 0이 된다'

      0  1  0  1    <-  10진수로 5
+)   1  0  1  1    <-  10진수로 -5
-----------------
 (1) 0  0  0  0    <- 자리올림이 발생했으나, 크기가 4비트라 버려짐 : 0

 

음수를 2진수로 표현

 

1. 10진 음의 정수의 절대값을 2진수로 변환

2. 해당 2진수의 '2의 보수'를 구한다

ex) '-5'의 2진 표현

-5(10)
  →  5(10)  →  0101(2)  →  1011(2)

 

2의 보수 구하기

'2의 보수 = 1의 보수 + 1'


1의 보수 : 0을 1로, 1을 1으로 변환

ex) 
      0  1  0  1    
          ↓
      1  0  1  0    <-  '0101'의 '1의 보수'
+)              1
-----------------
      1  0  1  1    <-  '0101'의 ' 2의 보수'    


'1의 보수 + 1' = '2의 보수'인 이유

1. 2진수에 해당 2진수의 1의 보수를 더하면 모든 자리가 1이 됨
2. (1)에 1을 더하면 올림 발생 후 0이 됨 (올림으로 4비트를 넘기 때문에 저장할 공간이 없어서 버려짐)

 

 


Reference 

자바의 정석 3rd edition

 

 

728x90