Java Category/Java

[JAVA] 오버플로우와 언더플로우

ReBugs 2023. 7. 12.

 

오버플로우(overflow)란 타입이 허용하는 최대값을 벗어나는 것을 말한다.

 

반대로 언더플로우(underflow)는 타입이 허용하는 최소값을 벗어나는 것을 말한다.

 

정수 타입 연산에서 오버플로 또는 언더플로가 발생하면 해당 정수 타입의 최소값 또는 최대값으로 되돌아간다.

 

 

예를 들어 byte타입일 경우 최대값 127에서 1을 더하면 128이 되어 오버플로가 발생하여 연산 결과는 최소값인 -128이 된다. 그리고 나서 다시 1을 더하면 -127이 된다.

byte value = 127;
++value;
System.out.println(value); //-128

마찬가지로 -128에서 1을 빼면 -129가 되어 언더플로가 발생하는데, 연산 결과는 최대값인 127이 된다. 그리고 다시 1을 빼면 128이 된다.

byte value = -128;
--value;
System.out.println(value);

short, int, long 타입은 값의 범위만 다를 뿐 오버플로 및 언더플로가 발생했을 때 마찬가지로 최소값 또는 최대값으로 되돌아간다.

댓글