제니노트

정수형의 오버플로우 [자바] 본문

Java/Java 입문

정수형의 오버플로우 [자바]

yangjennie 2023. 5. 30. 17:14
반응형

오버플로우 : 해당 타입이 표현할 수 있는 값의 범위를 넘어서는 것을 오버플로우(overflow)라고 한다.

 

10진수 -> 9999 +1 // 오버플로우 발생

2진수 - > 1111 +0001 // 오버플로우 발생 

 

오버플로우는 자동자 주행표시기, 계수기와 비슷하다.

최댓값 9999 다음의 숫자는 0000이 될 것이다.

최솟값 0000에서 1을 감소하면 9999가 될 것이다.

이는 마치 계수기를 거꾸로 돌리는 것과 같다. 0000에서 정방향으로 돌리면 0001이 되지만, 역방향으로 돌리면 9999가 되는 것이다.

 

최대값 + 1 -> 최소값
최소값 -1 -> 최대값

최대값이 10진수로는 9999 2진수로는 1111일텐데 여기서 1을 더하면 0000이 된다는 것

최소값이 0000일 때 1을 빼면 10진수로 9999, 2진수로는 1111이 된다는 것이다.

 

최소값과 최대값이 이어졌다고 생각하면 된다. 

최대값이 10진수 9999라고 하면 +1 을 해주면 0000 즉 최소값이 되고최소값이 10진수 0000라고 하면 -1 해주면 9999 즉 최대값이 된다.

최대값이 2진수 1111라고 하면 +1 을 해주면 0000 즉 최소값이 되고

최소값이 2진수 0000라고 하면 -1 해주면 1111 즉 최대값이 된다.

 

부호없는 정수의 경우 표현범위가 0~15이다.

부호있는 정수의 경우 표현범위가 -8~7이다.

 

부호없는 정수의 경우 

최대값 15 +1 을 하면 최소값 0이 된다.

최소값 0 - 1을 하면 최대값 15가 된다.

 

부호있는 정수의 경우

최대값 7+1을 하면 최소값 -8이 된다.

최소값 -8 -1 을 하면 최대값 7이 된다.

 

import java.util.Scanner; //1.import문 추가 

public class ScanfEx1 {

	public static void main(String[] args) {
		short sMin = -32768; //부호있는 정수(2byte)
		short sMax = 32767;
		char cMin = 0; //부호없는 정수(2byte)
		char cMax = 65535;
		//2byte = 16bit = 2^16 = 65536
		//short - > -32768~32767
		//char - > 0 ~ 65535
		System.out.println("sMin = "+sMin); //-32768
		System.out.println("sMin-1="+(short)(sMin-1));//-32767
		System.out.println("sMax ="+sMax);//32767
		System.out.println("sMax+1 ="+(short)(sMax+1));//-32768
		System.out.println("cMin = "+(int)cMin);//0 
		System.out.println("cMin-1 = "+(int)--cMin);//65535
		System.out.println("cMax = "+(int)cMax);//65535
		System.out.println("cMax+1 = "+(int)++cMax);//0 



		
		
		
		
		

	}

}

 

short와 char 크기는 모두 16bit이므로 표현할 수 있는 값의 개수 역시 2^16개(65535개,약 6만개)이다.

그러나 short는 이 중 절반 2^15(32768,약 3만개 )개를 음수를 표현하는데 사용하고

char는 전체(2^16개 = 65535+1개) 를 양수(65535), 0(1개)를 표현하는데 사용한다.

 

short : -2^15~ 2^15-1(32768~32767) // 부호있는 정수

char : 0~2^16-1 (0~65535) //부호없는 정수

 

출처: https://www.youtube.com/watch?v=XXq_uCic22Y&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=22

반응형

'Java > Java 입문' 카테고리의 다른 글

변수 중요 개념 [자바]  (0) 2023.05.31
타입간의 변환방법 [자바]  (0) 2023.05.30
화면에서 입력받기 - Scanner [자바]  (0) 2023.05.30
printf()에 대하여 [자바]  (0) 2023.02.26
classpath 설정하기 [자바]  (0) 2023.02.23
Comments