오버플로우
표현할 수 있는 범위를 넘어서는 것
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
'Language > Java' 카테고리의 다른 글
[Java] 연산자와 피연산자 (0) | 2023.02.01 |
---|---|
[Java] 타입간의 변환방법 (0) | 2023.01.29 |
[Java] 화면에서 입력받기 - Scanner (0) | 2023.01.24 |
[Java] printf를 이용한 출력 (0) | 2023.01.24 |
[Java] 변수 기본형의 종류와 범위 (0) | 2023.01.19 |
댓글