컴퓨터는 음수를 맨 앞 자리를 1이면 음수로 인식, 0이면 양수로 인식한다.
Java 자료형 byte인 경우 1byte는 8bit이므로 8칸을 사용하게 되고, 맨 앞자리는 부호 표현으로 쓰여
-128(10000000)~127(01111111)까지 표현할 수 있다.
여기서 양수는 우리가 생각하는 이진법 계산을 그대로 하여 10진법으로 변경하면 되지만,
음수는 - ( 수를 반전 후 + 1을 하여 계산한 값 ) 이 10진법으로 변환한 값이다.
따라서 위의 byte를 int로 바꾼다면 byte의 -128 ~ 127 범위를 컴퓨터는 이진수로 다음과 같이 표현이 될 것이다.
11111111111111111111111110000000 ~ 00000000000000000000000001111111
System.out.println(Integer.toBinaryString(-128)); //11111111111111111111111110000000
System.out.println(Integer.toBinaryString(127)); //1111111
또한 컴퓨터에서 10진수로 변환하는 방법이 다르므로 unsigned 값과 abs 값은 다를 수 밖에 없다.
-128부터 unsigned를 계산해보면
-128(11111111111111111111111110000000) -> 128(10000000)
-127(11111111111111111111111110000001) -> 129(10000001)
...
이므로 -128 -(절댓값)-> 128
-127 -(절댓값)-> 127
...
과는 그 결과가 다른 것이다.