Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

3.3 오버플로우와 언더플로우 본문

이것이 자바다/03 연산자

3.3 오버플로우와 언더플로우

빌드이너프 2024. 3. 29. 10:11

오버플로우 overflow

타입이 허용하는 최대값을 벗어나는 것

 

언더플로우 underflow

타입이 허용하는 최소값을 벗어나는 것

 

정수 타입 연산에서 오버플로우 또는 언더플로우가 발생되면 실행 에러가 발생할 것 같지만, 해당 정수 타입의 최소값 또는 최대값으로 되돌아간다

byte 타입일 경우 최대값 127에서 1을 더하면 128이 되어 최소값인 -128이 된다

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

 

-128에서 1을 빼면 최대값인 127이 된다

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

 

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

만약 연산 과정에서 int 타입에서 오버플러우 또는 언더플로우가 발생될 가능성이 있다면 long 타입으로 연산을 하도록 해야한다

 

package ch03.sec03;

public class OverflowUnderflowExample {
	public static void main(String[] args) {
		byte var1 = 125;
		for(int i=0; i<5; i++) {
			var1++;
			System.out.println("var1: " + var1);
		}
		
		System.out.println("===================");
		
		byte var2 = -125;
		for(int i=0; i<5; i++) {
			var2--;
			System.out.println("var2: " + var2);
		}
	}
}
var1: 126
var1: 127
var1: -128
var1: -127
var1: -126
===================
var2: -126
var2: -127
var2: -128
var2: 127
var2: 126