반응형

최댓값에서 +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