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