본문 바로가기
기타 지식들

오버플로우 방지 코드 작성법 4가지

by 클레어몬트 2024. 7. 5.
int calculateMid1(int left, int right) {
    return (left + right) / 2;
}

 

단순히 심플한 수식이지만 오버플로우가 발생할 수 있는 위험한 코드이다

오늘은 오버플로우를 방지할 수 있는 코드 작성법 4가지에 대해 설명하려 한다

 

 

 

 

1. 가장 유명한 방식

int calculateMid2(int left, int right) {
    return left + (right - left) / 2;
}

 

오버플로우 방지의 교과서 같은 방식이다

 

 

 

2. 비트 연산 방식

int calculateMid3(int left, int right) {
    return left + ((right - left) >> 1);
}

 

비트를 오른쪽으로 한 칸 이동시키는 연산으로, 이는 2로 나누는 것과 동일하다

 

 

 

3. unsigned int(부호 없는 정수) 방식

unsigned int calculateMid4(int left, int right) {
    return left + ((unsigned int)(right - left) / 2);
}

 

range가 2배 더 넓은 unsigned int 자료형을 사용하는 방식이다

배열의 인덱스를 다룰 때 특히 더 유용하다

 

 

 

4. 더 큰 자료형을 사용하는 방식

long long calculateMid5(int left, int right) {
    return left + ((long long)(right - left) / 2);
}

 

역시 마찬가지로 range가 더 넓은 자료형을 사용하는 방식이다 ㅋㅋ