1의 보수란?
2진수의 1의 보수는 모든 비트를 반전(flip)해서 만듭니다. 즉, 0은 1로, 1은 0으로 바꾸는 것이죠. 결과값은 사용하는 비트 수에 따라 달라지기 때문에 4, 8, 16, 32비트 같은 비트 폭을 먼저 정해야 합니다. 이 표현 방식은 초기 컴퓨터에서 부호 있는 정수를 나타내는 데 쓰였으며, 지금도 2진수 연산이나 오류 검출용 체크섬을 공부할 때 중요하게 다뤄집니다.
계산기 사용 방법
0 이상의 10진수를 입력하고 비트 폭을 선택하면, 계산기가 해당 폭에 맞춰 숫자를 마스킹한 뒤 모든 비트를 반전하고, 그 결과를 2진수와 10진수로 함께 보여줍니다. 입력한 숫자가 선택한 비트 폭으로 표현할 수 있는 범위를 넘어서면, 반전하기 전에 폭 안에 들어오는 하위 비트만 남깁니다.
공식 설명
계산식은 다음과 같습니다.
$$\text{Result} = \left(\sim\left(\text{Number} \,\&\, M\right)\right) \,\&\, M, \quad M = 2^{\text{Width}} - 1$$여기서 \(2^w - 1\) 항은 1이 w개 연속된 마스크입니다(8비트라면 \(11111111 = 255\)). 비트 NOT(\(\sim\)) 연산은 n의 모든 비트를 반전하고, 마스크는 선택한 폭을 넘어서는 비트를 잘라내어 결과가 범위 안에 머물도록 합니다.
예제로 보기
8비트에서 숫자 5를 살펴보겠습니다. 2진수로 \(5 = 00000101\) 입니다. 모든 비트를 반전하면 \(11111010\)이 되고, 이는 10진수로 250입니다. 따라서 8비트에서 5의 1의 보수는 250 입니다. 4비트에서는 \(5 = 0101\)이고, 반전하면 \(1010 = 10\)이 됩니다.
자주 묻는 질문
1의 보수와 2의 보수는 어떻게 다른가요? 2의 보수는 1의 보수에 1을 더한 값입니다. 이렇게 하면 0을 두 가지 방식으로 표현하는 문제를 피할 수 있습니다.
0의 1의 보수는 무엇인가요? 8비트에서는 \(11111111 = 255\) 입니다. 모든 비트가 1로 바뀌기 때문입니다.
왜 비트 폭에 따라 결과가 달라지나요? 비트 반전은 비트가 몇 개인지에 따라 달라집니다. 폭이 넓을수록 앞쪽에 1이 더 많이 붙어 더 큰 10진수 값이 나옵니다.