Page 26 -
P. 26
>>> (-4).to_bytes(1, byteorder='little', signed = True)
b'\xfc'
이 코드는 -4라는 ‘정수’를 컴퓨터 메모리에 저장되는 ‘바이트’ 형태로 표현하는 코드입니다.
첫 번째 인자는 몇 바이트로 나타낼지 지정합니다. 우리는 지금까지 예제를 1바이트로 진
행했으므로 1로 지정합니다. 두 번째 인자는 바이트 오더(byteorder)입니다. 마지막 인자인
signed는 양수와 음수를 모두 표현할지 아니면 양수만 표현할지 정하는 인수입니다.
바이트 오더는 빅 엔디언인지 아니면 리틀 엔디언인지 정하는 인자입니다. 빅 엔디언과 리틀 엔디언에 대한 설명은 9장
에서 자세히 알아보겠습니다. 이 예제에서는 1바이트만 사용하므로 빅 엔디언이든 리틀 엔디언이든 상관 없다는 것만
알면 됩니다.
출력 값은 16진수로 표현됩니다. 16진수 0xFC를 2진수로 변환하면 1111 1100입니다. 그림
2-6에서 구한 -4의 2의 보수와 같습니다. 이로써 컴퓨터는 음수를 2의 보수를 이용해 저장
한다는 걸 알 수 있습니다.
7.4 2의 보수로 표현하는 이유
그러면 컴퓨터는 왜 음수를 2의 보수로 저장할까요?
첫째, 양수와 음수를 모두 양수처럼 저장한다고 가정해 보겠습니다. 0000 0000과 1000
0000은 +0과 -0이 됩니다. 즉, 0을 표현하는 두 가지 방법이 존재하게 됩니다. 이렇게 되면
컴퓨터 입장에서는 수 하나를 더 표현할 수 있는데 비트 하나를 낭비하는 셈입니다. 또한 두
수를 비교할 때 CPU에서 뺄셈을 하는데 +0과 -0을 비교하면 결과 값이 예상과 다르게 나
옵니다.
둘째, 컴퓨터에서 정수의 뺄셈 과정을 살펴보겠습니다. 덧셈은 단순히 두 수를 더하면 되지
만, 뺄셈은 2의 보수 개념을 활용합니다. 9–4를 계산할 때 9에서 4를 빼는 게 아니라 9와
-4를 더합니다. 그림 2-7을 볼까요?
2장 정수 31