오버 플로우 (overflow)
2021. 2. 26. 15:45ㆍJava/한국어
자바의 자료형에서는 각 범위가 정해져 있다. 하지만 이 범위를 넘어 가는 값이 생기면 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 |