정수형의 오버플로
최댓값에서 +1을하면 오버플로우가 발생해서 최소값이 된다.
최소값에서 -1을하면 오버플로우가 발생해서 최대값이 된다.
종이를 앞뒤로 연결했다고 생각하면 쉽다.
결론은, 최댓값에다 +1을하면 최소값이되고,
최소값에 -1을 하면 최대값이 된다.
부호없는 정수(4bit)의 경우이다. 이경우, 표현범위가 '0~15'이다.
최댓값인 15에 +1을 하면 최솟값인 0이 되고,
최솟값인 0에 -1을 하면 최댓값인 15가 된다.
이번에는 부호 있는 정수(4bit)의 경우이다. 이 경우, 표현범위가 '-8~7'이다.
최댓값인 7에 +1을 하면 최소값인 -8이되고,
최소값인 -8에 -1을 하면 최대값인 7이 된다.
short 타입은 부호 있는 정수고, char는 부호 없는 정수이다. 둘다 2byte이다. 2byte는 16bit이고, 2^16이므로 대략 65536정도 된다.
그래서 short의 범위는, -32768~32767
char의 범위는, 0~65535이다.
결과를 보여주기 위해서 아직 배우지 않은 형변환을 사용하였는데, 곧 공부할 거니 너무 걱정하지는 말자.
즉, 최소값 -1은 최대값,
최대값 + 1은 최소값 이라는 것을 확인하면 된다.
지금까지 정수형의 오버플로우에 대해서 알아보았는데,
추가적으로 부호 있는 정수와 부호 없는 정수의 범위에 대해서 알아보도록 하겠다.
10진수 한자리로 표현할 수 있는 값의 범위는 0~9(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) 총 10개이다.
범위를 0~10-1라고 표현할 수 있다.
그러면 10진수 두자리로 표현할 수 있는 값의 범위는 어떻게 될까?
0~99니까 0~100-1 즉 0~10(^2)-1이다.
그러면 10진수 세자리인 경우는?
0~10(^3)-1
10진수 네자리인 경우는?
0~10(^4)-1
이번에는 2진수 보자.
2진수 한자리로 표현할 수 있는 값의 범위는 0~2-1
2진수 두자리로 표현할 수 있는 값의 범위는 0~2(^2)-1
2진수 세자리로 표현할 수 있는 값의 범위는 0~2(^3)-1
2진수 네자리로 표현할 수 있는 값의 범위는 0~2(^4)-1 이다.
즉, n bit로 표현할 수 있는 값의 범위는 0~2(^n)-1이다.
그러니까 16bit로 표현할 수 있는건, 16bit : 0~2^(16) -1 을 표현할 수 있다. (부호 없는 경우임)
short타입은 부호있는 정수, char타입은 부호가 없는 정수인데 둘다 또같이 16bit이다.
그래서 둘다 표현할 수 있는 값의 개수가 2^16 약 6만개 정도인데,
부호 있는 short type의 경우, 음수도 표현해야 하기 때문에 똑같이 6만개 정도일지라도 범위가 다르다.
절반을 부호있는(음수)에 사용하기 때문에 범위가 다르다.
하지만 short타입과 char타입 둘다 16bit이므로 약 6만개의 값을 표현할 수 있다.
'JAVA' 카테고리의 다른 글
연산자와 피연산자 (0) | 2022.03.14 |
---|---|
타입간의 변환방법 (0) | 2022.03.14 |
화면으로부터 입력받기 (0) | 2022.03.13 |
printf를 이용한 출력 (0) | 2022.03.12 |
기본형의 종류와 범위 (0) | 2022.03.11 |
댓글
이 글 공유하기
다른 글
-
연산자와 피연산자
연산자와 피연산자
2022.03.14 -
타입간의 변환방법
타입간의 변환방법
2022.03.14 -
화면으로부터 입력받기
화면으로부터 입력받기
2022.03.13 -
printf를 이용한 출력
printf를 이용한 출력
2022.03.12