Java에서 정수 오버플로 및 언더플로 처리

MD Aminul Islam 2023년10월12일
  1. Java의 정수 오버플로 및 언더플로 개요
  2. Java의 정수 오버플로
  3. Java의 정수 언더플로
Java에서 정수 오버플로 및 언더플로 처리

이 문서에서는 정수 데이터 형식의 오버플로 및 언더플로와 이 문제의 처리에 대해 설명합니다.

Java의 정수 오버플로 및 언더플로 개요

정수 값으로 작업하는 경우 오버플로 또는 언더플로 오류가 발생할 수 있습니다. 선언된 데이터 유형의 범위를 벗어난 값을 할당하는 것과 같이 변수를 잘못 선언할 때 발생합니다.

우리가 알고 있듯이, 아래에 주어진 서로 다른 크기를 포함하는 네 가지 수준의 정수 데이터 유형이 있습니다.

데이터 형식 크기
byte 8비트
short 16비트
int 32비트
long 64비트

Java에서 int를 고려하면 할당할 수 있는 값의 범위가 있습니다. 이미 알고 있듯이 int 데이터 유형의 크기는 32비트입니다. 따라서 int에서 허용되는 값의 범위는 -2147483648에서 2147483647 사이입니다.

Integer.MAX_VALUEInteger.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)

정수 오버플로 처리

위의 예를 해결하려면 값 범위를 늘려야 합니다. 우리의 경우 integerlong으로 타입 변환합니다. 위 예제의 업데이트된 코드는 다음과 같습니다.

예제 코드:

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

따라서 오버플로나 언더플로 문제를 해결하기 위해서는 데이터 타입의 범위를 늘려야 합니다.

MD Aminul Islam avatar MD Aminul Islam avatar

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 Integer