컴퓨터에서는 정수를 표현할 때 2의 보수 표기법을 사용한다
간단하게 요약하면
예를 들어, 어떤 자료형의 비트 수가 4고, 이 상황에서 +5를 표현한다고 하면
2의 보수 표기법에서 맨 앞은 부호 비트가 되므로
00101
이 된다.
이걸 음수로 바꾸면 반전시킨후 1을 더하면 되므로
11011
이다
값을 표현할 수 있는 비트는 7비트고, 따라서 2^7 = 128이다.
하지만, byte의 최소값과 최대값을 찾아보면
-128과 +127이다
이 이유부터 알아보자
2의 보수를 생각하지말고 128을 이진수로 표현한다고 생각해보면
10000000 이다.
하지만, 방금 말한 것처럼 byte타입은 부호비트를 제외하고 7개만
사용가능하므로 byte 자료형에서 위의 수는 음수다.
따라서 byte로는 128이 표현이 불가능하다.
10000000을 2의 보수 표기법을 이용해서 숫자로 바꿔보면
10000000에서 1을 빼면 01111111이고 이걸 반전시켜주면
10000000이 되므로 결국 2의 보수 표기법에서 10000000은 -128이 된다.
이런 이유로, 2의 보수 표기법에서 byte 자료형은 양수의 경우 최대 127까지만
표현이 가능하고, 음수의 경우 -128까지 가능하다
127은 01111111이다. 여기서 1을 더하면
10000000이다. 위에 써놓은 것처럼 10000000은 -128이므로
정수 자료형의 최대값에서 값을 더하면 음수로 넘어가는 이유다.