[c++] 산술 오버플로우
컴퓨터 프로그래밍에서 산술 오버플로우는 정수형 변수가 표현할 수 있는 최대 값보다 더 큰 값으로 증가하거나 최솟값보다 더 작은 값으로 감소할 때 발생합니다. 이는 보통 해당 변수가 표현할 수 있는 범위를 초과하게 되고, 시스템은 그 값을 반올림하여 새롭게 할당합니다.
산술 오버플로우의 예시
#include <iostream>
int main() {
unsigned char number = 255; // 8-bit 부호 없는 정수 최대값
number = number + 1;
std::cout << "Number: " << (int)number << std::endl;
return 0;
}
위의 코드에서 number
가 1 증가하기 전까지는 정상적으로 동작하지만, 256은 unsigned char
가 표현할 수 있는 최대값을 초과하므로 산술 오버플로우가 발생합니다.
산술 오버플로우 방지 방법
- 오버플로우를 일으킬 수 있는 변수를 사용할 때 주의하여야 합니다.
- 데이터 형의 크기를 고려하고, 산술 연산을 수행하기 전에 범위를 체크하는 등의 방어적인 프로그래밍 기술을 사용합니다.
산술 오버플로우는 버그를 유발할 수 있어 신중하게 다루어져야 합니다. 코드를 작성할 때 산술 오버플로우 가능성을 고려하고 안전한 방어코드를 작성하는 것이 좋습니다.
참고 자료
- The C++ Programming Language - Bjarne Stroustrup
- Understanding and Preventing Integer Overflow in C/C++ - CERT
- Integer overflow - Wikipedia