2의 보수를 구하는 법은 아래와 같다.
- 원래 양수의 비트를 반전시킨다 (NOT 연산)
- 1을 더한다
예를 들어, 1101(2)가 있으면 부호를 반전해 0010(2)를 얻는다. 여기에 1을 더한 0011(2)이 원래의 숫자 1101(13이다)의 보수다.
바로 이 보수(complement)를 음수로 간주하자는 것이 컴퓨터의 음수 표현법이다.
왜 보수를 음수로 취급할까?
+10과 -10은 더하면 0이 된다. +123과 -123은 더하면 0이 된다. 즉, 수학적으로 말하면 음수는 원래의 수에 더해져서 덧셈의 항등원(0)을 만들어내는 수로 정의된다.
0과 1을 반전시키면 비트가 다른 데이터를 얻는다. 이 둘을 더하면 모든 비트열에 대해 0과 1을 더하는 것이므로 11111....이 된다. 여기서 1을 더하면 올림이 발생한 1을 버린다는 가정 하에 결과는 00000000..... 이 되어 0이 된다.
즉, 보수(complement)는 덧셈이라는 연산의 맥락에서 추출한 것으로서, 뺄셈과 덧셈을 일관적으로 계산할 수 있게 해준다.
예를 들어 보수를 더하면 (보수의 정의에 따라) 반드시 0을 얻을 수 있으니 음수가 맞고, 보수를 뺀다면 빼기는 부호를 반전해 더하는 것과 같으므로 보수의 보수를 구할 것이다. 보수의 보수는 원래 숫자가 나온다. 따라서 빼기의 빼기는 덧셈이라는 것도 얻을 수 있다.
그러나 보수는 원래의 양수 값과 구분이 안 된다는 단점이 있다. 그래서 플래스(flag)를 통해 이 값이 음수인지 아닌지 판단해야 한다.
'IT 공부 > 컴퓨터 하드웨어 및 구조' 카테고리의 다른 글
하드웨어 쓰레드와 소프트웨어 쓰레드 (0) | 2023.12.27 |
---|---|
함수 호출 시 스택프레임이 관리되는 원리 (어셈블리 레벨) (0) | 2023.12.26 |
은근히 헷갈리는 비트, 바이트 단위 정리 (0) | 2023.12.26 |
C언어 컴파일 과정 (0) | 2023.11.15 |
메모리 계층 구조와 알고리즘의 공학적 한계 (0) | 2023.11.03 |