[Java] 오버플로우
카테고리: Java
태그: coding Programming Java
오버플로우
오버플로우란?
- 자료형의 값의 최대 범위를 벗어나는 경우
- 발생한 carry를 버림 처리라고 하고 sign bit를 반전시켜 최소값으로 순환시키는 현상이다
오버플로우
byte num1 = 127;
System.out.println("num1 : " + num1);
num1++; //1이 증가
System.out.println("num1 오버플로우 : " + num1);
- 출력값
num1 : 127
num1 오버플로우 : -128
언더플로우
- 오버플로우와 반대의 개념으로 최소 범위보다 작은 수를 발생시키는 경우 발생하는 현상이다
byte num2 = -128; //1이 감소
System.out.println("num2 : " + num2);
num2--; //1이 증가
System.out.println("num2 언더플로우 : " + num2);
int firstNum = 1000000; //100만
int secondNum = 700000; //70만
int multi = firstNum * secondNum; //7천억이 나와야함
System.out.println("firstNum * secondNum = " + multi);
- 출력값
num2 : -128
num2 언더플로우 : 127
firstNum * secondNum = -79669248
해결방법
- 오버플로우를 예측하고 더 큰 자료형으로 결과값을 받아서 처리한다
long longMulti = firstNum * secondNum;
System.out.println("longMulti : " + longMulti); //안되지? 똑같지?
long result = (long) firstNum * secondNum;
System.out.println("result : " + result);
- 출력값
longMulti : -79669248
result : 700000000000
댓글 남기기