자료형과 오버플로우

간단하지만, 실수하기 쉬운 것들을 정리해보았다.

(1) 현재 자료형에 대한 연산을 할 때, 오버플로우 가능성을 생각한다.

예:
    long long solution(int w, int h)
    {
        return w * h; (X)
        return (long long)w * h; (O)
    }
    int main()
    {
        int a = 100,000,000, b = 99,999,999; 
        solution(a, b);
    }



(2) 현재 자료형을 다른 자료형으로 형변환할 때, 오버플로우 가능성을 생각한다.

예:
    long long a = 123,456,789,123,456,789;
    double b = a; (X) <- 대략적으로 10^16을 넘어가는 숫자를 그대로 담을 수 없다.



(3) 영문과 숫자에 관련된 문자를 처리할 때, char가 127을 넘어가는 것을 생각한다. (C, C++)
대소문자를 변환할 때나 더해주는 작업을 할 때, 1byte 내에서 해결하려고(?)
문자형을 정수형으로 바꿔주지 않고 하는 경우가 많다. 이때, 실수하지 않도록 유의하자.
(C#, Java의 경우는 char가 유니코드를 기반으로 한 2byte로 설정 되어있다.)
 


(4) 연산이나 함수 사용중에 형변환 되는 부분을 생각한다.


댓글

이 블로그의 인기 게시물

[PS] BOJ 20543번 폭탄 던지는 태영이

프로그래밍에서 실수형의 부정확성

프로그래머스 2019 윈터코딩 온라인 테스트를 보았다. (풀이)