[자바] 자바의 정수형 타입
정수형 타입
자바에서 정수란 부호를 가지고 있으며, 소수 부분이 없는 수를 의미합니다.
자바의 기본 타입 중 정수를 나타내는 타입은 다음과 같습니다.
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를 저장하려고 합니다.
따라서 이때도 언더플로우가 발생하여 잘못된 결과값이 저장됩니다.