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
따라서 오버플로나 언더플로 문제를 해결하기 위해서는 데이터 타입의 범위를 늘려야 합니다.
Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.
LinkedIn관련 문장 - Java Error
- $' ' 수정: Java에서 명령을 찾을 수 없음 오류
- Android Java.Lang.IllegalStateException 수정: 활동의 메서드를 실행할 수 없음
- Eclipse 오류: 선택 항목을 실행할 수 없습니다.
- Eclipse에서 'Java Virtual Machine을 찾을 수 없음' 오류 수정
- Eclipse에서 Java Runtime Environment를 계속하기 위한 메모리가 부족합니다.
- Fix Class X Is Public은 X.java 오류라는 파일에서 선언해야 합니다.