오버 플로우 (overflow)

2021. 2. 26. 15:45Java/한국어

자바의 자료형에서는 각 범위가 정해져 있다. 하지만 이 범위를 넘어 가는 값이 생기면 overflow가 생긴다.

여기서 아직 설명하지 않은 for문이 나왔지만 어떠한 문장을 반복하여 실행하는 문장이라고만 생각하자.

//byte overflow
byte b1 = 0;		// byte형 변수 0으로 초기화
int i = 0;
		
//반복문 b를 1씩 0 to 270
for (int x= 0; x<=270; x++) {
	System.out.print(b1++);  //print는  출력후 줄바꿈 없음
	/*
	 byte 127은 01111111 -127은 1000001
	 -128  10000000 128 00000000
	 */
				
	System.out.print('\t'); //tap키 출력
	System.out.println(i++);
}

여기서 byte를 이용한 overflow를 보여주고 있다. 

자바에서 byte의 저장 값은 256까지이다. 따라서 만약 이 값을 넘어가면 저장한 값이 나타나지 않고 음수 값이 나오거나 엉뚱한 값이 출력 되기도 한다. 

 

		
//byte c = 128; //애러 발생
byte d1 = 127;
System.out.println(d1);
System.out.println(1+2+4+8+16+32+64);
		
byte b2 = 10;
int i2 = (int)b2;
System.out.println("i = " + i2); //10
System.out.println("b = " + b); //10

만약 위에서 처럼 byte c = 128이라고 정의 했을때에는 오류가 나타난다.

 

int i3 = 300;
byte b3 = (byte)i3;
		
System.out.println("i2 = " + i3); // 300
System.out.println("b3 = " + b3); // 44 (300-256) 큰 데이터 -> 작은거는 상관없지만 반대는 상관이 있다

또한 마지막 코드처럼 int값을 byte값으로 변환을 했을때에는 256을 뺀값이 나타난다.

'Java > 한국어' 카테고리의 다른 글

관계 연산자  (0) 2021.02.28
부호 연산자  (0) 2021.02.26
자바 문자열 발전  (0) 2021.02.26
float와 double  (0) 2021.02.26
문자열에 '/'나 '\' 또는 "을 넣고 싶은 경우  (0) 2021.02.26