개발노트/Java

[Java] 보수

Dahoon06 2021. 2. 20. 19:05
728x90
반응형

n의 보수

더 했을 때 n이 되는 수

 

7의 '10의 보수' -> 3

3의 '7의 보수' -> 7

 

1의 보수

어떤 수를 커다란 2의 거듭제곱수에 -1을 하여 얻은 이진수

또는 비트를 반전시켜 얻을 수 있다.

1의 보수는 대부분의 산술연산에서 원래 숫자의 음수처럼 취급된다.

 

주어진 이진수와 자리수가 같고 모든 자리가 1인 수에서 주어진 수를 뺴서 얻은 수가 1의 보수이다.

혹은 주어진 이진수의 모든 자리의 숫자를 반전(0 -> 1, 1 -> 0)시키면 1의 보수

ex) 101010 - > 010101

 

1의 보수 공식 => 입력 받은 이진수 값을 모두 반대로 바꾸어주면 된다.

코드 상으로 표현 : 1 - (해당 위치의 이진수 값) = x

 

2의 보수

어떤 수를 커다란 2의 제곱수에서 빼서 얻은 이진수.

주어진 이진수보다 한 자리 높고 가장 높은 자리가 1이며 나머지가 0인 수에서 주어진 수를 빼서 얻은 수가 2의 보수

혹은 주어진 이진수의 모든 자리의 숫자를 반전 (0 -> 1, 1 -> 0)시킨뒤 1을 더하면 2의 보수

ex) 101010 - > 010101(1의 보수) - > 010110(2의 보수)

 

2의 보수 공식 => 변경된 1의 보수 값에 마지막 뒷자리에 1자리 올림 해준 값

 

Not연산(~) 

이진수 값을 반대로.

ex) num = 1010 => ~num = 0101

2의 보수(-num) 1의 보수에 1을 더함

~num +1 = -num = 0110

 

원래수와 2의 보수를 &연산 하면 원래수의 마지막 1인 비트를 구할 수 있다.

num & -num = 0010

 

 

 

728x90
반응형

'개발노트 > Java' 카테고리의 다른 글

[Java] 예외 처리  (0) 2021.04.02
[Java] File Class  (0) 2021.03.19
[Java] method  (0) 2021.03.19
[Java] String Method  (0) 2021.03.17
[Java] 배열과 ArrayList  (0) 2021.03.17