HOWTO · Java
Java에서 정수 오버플로 및 언더플로 처리
이 자습서에서는 Java의 정수 오버플로 및 언더플로 처리에 대해 설명합니다.
이 문서에서는 정수 데이터 형식의 오버플로 및 언더플로와 이 문제의 처리에 대해 설명합니다.
Java의 정수 오버플로 및 언더플로 개요
정수 값으로 작업하는 경우 오버플로 또는 언더플로 오류가 발생할 수 있습니다. 선언된 데이터 유형의 범위를 벗어난 값을 할당하는 것과 같이 변수를 잘못 선언할 때 발생합니다.
우리가 알고 있듯이, 아래에 주어진 서로 다른 크기를 포함하는 네 가지 수준의 정수 데이터 유형이 있습니다.
| 데이터 형식 | 크기 |
|---|---|
byte |
8비트 |
short |
16비트 |
int |
32비트 |
long |
64비트 |
Java에서 int를 고려하면 할당할 수 있는 값의 범위가 있습니다. 이미 알고 있듯이 int 데이터 유형의 크기는 32비트입니다. 따라서 int에서 허용되는 값의 범위는 -2147483648에서 2147483647 사이입니다.
Integer.MAX_VALUE 및 Integer.MIN_VALUE를 사용하여 최대값과 최소값을 빠르게 얻을 수 있습니다.
Java의 정수 오버플로
여기에서 Integer 오버플로 발생 및 처리를 볼 수 있습니다.
정수 오버플로 발생
예제 코드:
public class IntegerOverflow {
public static void main(String[] args) {
int Intvalue = Integer.MAX_VALUE - 1;
for (int i = 0; i < 4; i++) {
System.out.println(Intvalue);
Intvalue = Math.addExact(Intvalue, 1);
}
}
}
이제 위의 프로그램을 실행하면 콘솔에 아래 출력이 표시됩니다.
2147483646
2147483647
Exception in thread "main" java.lang.ArithmeticException: integer overflow
at java.base/java.lang.Math.addExact(Math.java:828)at IntegerOverflow.main(IntegerOverflow.java:9)
정수 오버플로 처리
위의 예를 해결하려면 값 범위를 늘려야 합니다. 우리의 경우 integer를 long으로 타입 변환합니다. 위 예제의 업데이트된 코드는 다음과 같습니다.
예제 코드:
public class IntegerOverflow {
public static void main(String[] args) {
int Intvalue = Integer.MAX_VALUE - 1;
long NewValue = (long) Intvalue; // Upgrading to new type
for (int i = 0; i < 4; i++) {
System.out.println(NewValue);
NewValue = Math.addExact(NewValue, 1);
}
}
}
이제 콘솔에 아래 출력이 표시됩니다.
2147483646
2147483647
2147483648
2147483649
Java의 정수 언더플로
이 섹션에서는 Java의 Integer underflow와 이를 처리하는 방법에 대해 알아봅니다.
정수 언더플로 발생
예제 코드:
public class IntegerUnderflow {
public static void main(String[] args) {
int value = -2147483699; // Creating underflow intentionally
System.out.println(value - 1);
}
}
이제 위의 프로그램을 실행하면 콘솔에 아래 출력이 표시됩니다.
/IntegerUnderflow.java:3: error: integer number too large
int value = -2147483699; // Creating underflow intentionally
^
1 error
정수 언더플로 처리
위의 오류를 해결하려면 값의 범위를 다시 늘려야 하며 이를 위해 정수 값을 다음 수준으로 typecast할 수 있습니다. 아래에 공유된 코드를 살펴보십시오.
예제 코드:
public class IntegerUnderflow {
public static void main(String[] args) {
long value = (long) -2147483638; // Type Casting
System.out.println(value - 1);
}
}
이제 콘솔에 아래 출력이 표시됩니다.
-2147483639
따라서 오버플로나 언더플로 문제를 해결하기 위해서는 데이터 타입의 범위를 늘려야 합니다.