[Java] 오버플로우

Date:     Updated:

카테고리:

태그:

java.png

오버플로우

오버플로우란?

  1. 자료형의 값의 최대 범위를 벗어나는 경우
  2. 발생한 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

요약. 이전에 배웠던 자료형을 생각하자.
정수를 취급하는 자료형 byte->short->int->long

이제 슬슬 배운 양이 늘어날수록 먼저 배운 것을 잃어버리지 않도록 복습을 잘하자!!

Java 카테고리 내 다른 글 보러가기

댓글 남기기