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가 더 넓은 자료형을 사용하는 방식이다 ㅋㅋ
'기타 지식들' 카테고리의 다른 글
스코프의 중요성 (0) | 2024.08.04 |
---|---|
배열의 인덱스가 0부터 시작하는 이유 (0) | 2024.07.24 |
전역 변수의 일장일단 (0) | 2024.07.19 |
조건식 순서의 중요성 (단락 평가) (0) | 2024.07.19 |
foo bar baz 의미 및 유래 (1) | 2024.03.26 |