우리가 사용하는 컴퓨터는 숫자를 2진수 체계로 표현합니다.

그 중에서 음수를 표현할 때에는 맨 첫 bit를 사용하여 검사하는데 맨 첫 bit가 0이라면 양수, 1이라면 음수로 처리합니다.

1byte의 크기에서 예시를 들어보겠습니다.

ex 1) 1 = 0000 0001
ex 2) -1 = 1111 1111

그런데 -1이 왜 1111 1111라는 bit값을 가질까요?

그 이유는 어떤 한 양의 정수에 -1을 곱한 음의 정수값은 원래 값의 보수이기 때문입니다.

역으로 생각하면 어떤 한 음의 정수값에 -1을 곱한 양의 정수값도 마찬가지로 원래 값의 보수입니다.

(보수를 구하는 법은 어떤 한 값 N의 모든 bit를 0은 1로 1은 0으로 바꿔준 후, +1을 진행해주면 됩니다.)

그런데 여기서 치명적인 오류가 하나 발생합니다.

1byte (8bit)의 크기를 가진 어떤 정수 N이 존재한다고 가정합시다.

N이 일반적인 어떤 다른 값을 가지고 있다면 상관이 없겠지만, N이 만일 -128 그러니까 bit값으로는 1000 0000이라는 값을 갖고있다면 어떻게 될까요?

위의 N이라는 값을 절대값을 만들어본다고 생각해봅시다.

그럼 자연스레 N의 모든 bit는 반전이 된 후 +1이 될 것입니다.

1000 0000 ->(반전) 0111 1111 ->(+1) 1000 0000 엥 놀랍게도 다시 원래의 값인 -128로 돌아오게 되었습니다.

짜잔~~