앞서 학습하였듯이 모든 리터럴은 실제로 2진수로 바뀌어 저장된다.

또한 양수와 음수의 값의 범위를 갖는 정수형은

2진수로 변환되었을 때, 왼쪽의 첫 번째 비트를

음수와 양수를 결정하는 부호 비트(sign bit)로 사용한다.

그리고 그 나머지비트가 값을 표현하는 데 사용한다.

byte 01111111은

부호 비트가 0이므로 양수이다.

1111111은 2진수 7자리로 표현할 수 있는 가장 큰 값으로

byte 타입 양수의 최대값이다.

 

11111111의 경우,

부호 비트가 1이므로 음수이며,

1111111은 마찬가지로 가장 큰 값이 되기 때문에

11111111을 음수 중 가장 큰 값인 -1이 된다.

 

정수형은 타입의 크기만 알면,

최대값과 최소값을 쉽게 계산할 수 있다.

 

 

 

정수형 데이터 타입을 사용해야 할 때는

정수 값의 범위가 작더라도

byte와 short보다는 int를 사용해야 한다.

byte와 short가 int보다 크기가 작아서 메모리를 절약할 수 있지만

값의 범위가 작기 때문에 

연산 시에 범위를 넘어서 잘못된 결과를 얻기 쉽다.

 

또한 JVM의 피연산자 스택(operand stack)이

피연산자를 4byte 단위로 저장하므로

4byte보다 작은 byte와 short의 값을 계산할 때는

4byte로 변환하여 연산을 수행한다.

그래서 int를 쓰는 것이 성능면에서도 났다.

 

byte와 short는 성능보다는

저장공간을 절약하는 것이 중요할 때만 사용한다.

 

int 타입의 범위를 넘는 수를 다뤄야 할 때는 long을 사용하면 된다.

(long 타입의 범위를 넘는 수를 다뤄야 할 때는

Biginteger클래스라는 걸 사용할 수 있다. 추후에 학습)