본문 바로가기
Language/Java

[Java] 정수형의 오버플로우

by DevPark 2023. 1. 25.

오버플로우

표현할 수 있는 범위를 넘어서는 것

class Ex2_11 {
	public static void main(String[] args) {
    	short sMin = -32768,  sMax = 32767;
        char  cMin = 0,       cMax = 65535;
        
        System.out.println("sMin = " + sMin);
        System.out.println("sMin-1 = " + (short)(sMin-1));
        System.out.println("sMax = " + sMax);
        System.out.println("sMax+1 = " + (short)(sMax+1));
        System.out.println("cMin = " + (int)cMin);
        System.out.println("cMin-1 = " + (int)--cMin);
        System.out.println("cMax = " + (int)cMax);
        System.out.println("cMax+1 " + (int)++cMax);
     }
}

결과 

sMin = -32768

sMin-1 = 32767

sMax = 32767

sMax+1 = -32768

cMin = 0

cMin-1 = 65535

cMax = 65535

cMax+1 = 0

 

 

예제를 보면 short 타입은 부호 있는 정수이고 char 타입은 부호 없는 정수이다.둘 다 2byte이다. 2byte는 16bit이다. 16bit는 2의 16제곱이다. 이는 65536이다. short의 범위는 -32768 부터 32767까지이다. char의 범위는 0부터 65535까지이다.

sMin은 short의 최소값, sMax,는 short의 최대값이다. 최소값 -1은 최대값이고 최대값+1은 최소값이다. 


부호 있는 정수와 부호 없는 정수의 범위

10진수 한자리로 표현할 수 있는 값의 범위는 얼마인가?

0~9(0,1,2,3,4,5,6,7,8,9)이다. 범위를 0~10-1로 표현할 수 있다.

 

10진수 두자리로 표현할 수 있는 값의 범위는 얼마일까?

0~99이니 0~100-1, 0~10²-1로 표현할 수 있다.

 

세자리는 0~10³-1, 네자리는 0~10⁴-1로 표현할 수 있다. 

n자리는 0~10ⁿ-1로 표현할 수 있다.표현 범위에 0이 포함되어있기 때문에 -1을 해주는 것이다.

 

2진수 한자리로 표현할 수 있는 9값의 범위는 0과 1이니 0~1이다. 다르게 표현하면 0~2-1이다.

두 자리는 00~11인데 11은 10진수에서 3이다. 0~2²-1로 표현할 수 있다.

세 자리는 000~111이다. 이는 0~7이고 0~2³-1로 표현할 수 있다.

n 자리는 0~2ⁿ-1로 표현할 수 있는 것을 알 수 있다.

n bit로 표현할 수 있는 값의 범위는 0~2ⁿ-1이다.

 

이것은 부호 없는 경우는 0~2ⁿ-1까지 표현

부호가 있을 경우 -2ⁿ¹~2ⁿ-1

반응형

댓글