티스토리 뷰

1. 오버플로우 개요

처음부터 크기를 정하는 것이 좋다!!!

 

1-1. 오버플로우(overflow)란?

💡변수가 담을 수 있는 값의 범위를 벗어나는 데이터를 담았을 때 발생하는 현상
자료형 별 값의 최대 범위를 벗어나는 경우 발생한 carry를 버림처리 하고 sign bit를 발전시켜 최소값으로 순환시키는 현
package com.ohgiraffers.section04.overflow;

public class Application1 {
    public static void main(String[] args) {

        /* 수업목표. 오버플로우에 대해 이해할 수 있다. */
        /* 필기.
         *  자료형 별 값의 최대 범위를 벗어나는 경우
         *  발생한 carry를 버림처리하고 부호 비트를 반전시켜 순환한다.
         * */

        /* 설명. 오버플로우 */
        byte num1 = 126;

        num1++;                 // 기존의 num1 변수에 있던 값에 1을 더해 다시 대입한다.
                                // num1 = num1 + 1;

        System.out.println("num1 = " + num1);

        num1++;
        System.out.println("num1 = " + num1);

        num1++;
        System.out.println("num1 = " + num1);

        /* 설명. 언더플로우 */
        num1--;
        System.out.println("num1 = " + num1);

        num1--;
        System.out.println("num1 = " + num1);

        num1--;
        System.out.println("num1 = " + num1);

    }
}

1-2. 오버플로우 발생 확인과 해결 방법

  • 논리적 문제 발생과 해결 방법
/* 문제 발생 */

int firstNum = 1000000;			//100만
int secondNum = 700000;			//70만

int multi = firstNum * secondNum;		//7천억이 나와야 함

System.out.println("firstNum * secondNum = " + multi);			//--79669248 이 나온다.

// 실행 결과
firstNum * secondNum = -79669248

/* 해결 방법 */
/* 오버플로우를 예측하고 더 큰 자료형으로 결과값을 받아서 처리한다. */
long longMulti = firstNum * secondNum;

System.out.println("longMulti : " + longMulti);		//여전히 오버플로우가 발생한다.

/* 이미 오버플로우 처리 된 결과를 가지고 변수에 담기 때문에 위에 결과랑 별 차이가 없다.
* 그럼 어떻게 해결을 해야 하나?
* 계산이 처리 되기 전에 long 타입으로 자료형을 변경해주어야 한다. (강제형변환 이용)
* 강제 형변환은 바로 다음 섹션에서 다루게 될 예정이다.
* */
long result = (long) firstNum * secondNum;

System.out.println("result : " + result);			//정상적으로 7천억이 출력될 것이다.

// 실행 결과
longMulti : -79669248
result : 700000000000

'한화시스템 > 백엔드' 카테고리의 다른 글

[BE] JAVA_연산자  (0) 2024.07.13
[BE] JAVA_형변환  (0) 2024.07.13
[BE] JAVA_상수  (0) 2024.07.13
[BE] JAVA_변수  (0) 2024.07.13
[BE] JAVA_리터럴  (0) 2024.07.12
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함