IT정보

[자바] 자바의 정수형 타입

정한d 2020. 4. 29. 22:36

정수형 타입

 

자바에서 정수란 부호를 가지고 있으며, 소수 부분이 없는 수를 의미합니다.

자바의 기본 타입 중 정수를 나타내는 타입은 다음과 같습니다.

 

1. byte

2. short

3. int

4. long

 

다음 표는 각각의 정수형 타입에 따른 메모리의 크기 및 데이터의 표현 범위를 나타냅니다.

정수형 타입할당되는 메모리의 크기데이터의 표현 범위

byte 1바이트 -128 ~ 127
short 2바이트

-215 ~ (215 - 1)

-32,768 ~ 32,767
int 4바이트 -231 ~ (231 - 1)
-2,147,483,648 ~ 2,147,483,647
long 8바이트 -263 ~ (263 - 1)
-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

 

정수형 데이터의 타입을 결정할 때에는 반드시 자신이 사용하고자 하는 데이터의 최대 크기를 고려해야 합니다.

해당 타입이 표현할 수 있는 범위를 벗어난 데이터를 저장하면, 오버플로우(overflow)가 발생해 전혀 다른 값이 저장될 수 있기 때문입니다.

 

오버플로우(overflow)란 해당 타입이 표현할 수 있는 최대 범위보다 큰 수를 저장할 때 발생하는 현상을 가리킵니다.

오버플로우가 발생하면 최상위 비트(MSB)를 벗어난 데이터가 인접 비트를 덮어쓰므로, 잘못된 결과를 얻을 수 있습니다.

또한, 언더플로우(underflow)란 해당 타입이 표현할 수 있는 최소 범위보다 작은 수를 저장할 때 발생하는 현상을 가리킵니다.

 

자바에서 byte 타입이 표현할 수 있는 범위는 -128부터 127까지 입니다.

하지만 위의 예제에서 변수 num1은 127에 1을 더해 128을 저장하려고 합니다.

이렇게 해당 타입이 표현할 수 있는 최대 범위보다 더 큰 수를 저장하려고 하면, 오버플로우가 발생하여 잘못된 결과가 저장됩니다.

또한, 변수 num2에는 해당 타입이 표현할 수 있는 최소 범위보다 더 작은 수인 -129를 저장하려고 합니다.

따라서 이때도 언더플로우가 발생하여 잘못된 결과값이 저장됩니다.