정수 오버플로

컴퓨터 프로그래밍에서 정수에 대한 산술 연산이 주어진 자릿수로 표시할 수 있는 범위(최대값보다 크거나 최소 표현 가능한 값보다 낮음)를 벗어나는 숫자 값을 생성하려고 할 때 정수 오버플로(integer overflow)가 발생한다.

오버플로의 가장 일반적인 결과는 결과의 표현 가능한 최하위 숫자가 저장된다는 것이다. 결과는 최대값을 둘러싸는 것으로 간주된다(즉, 모듈러 기수 거듭제곱, 현대 컴퓨터에서는 일반적으로 2이지만 때로는 10 또는 기타 숫자). 포화 연산을 지원하는 그래픽 처리 장치(GPU) 및 디지털 신호 프로세서(DSP)와 같은 일부 프로세서에서는 오버플로된 결과가 고정된다. 즉, 결과가 최소값 미만인 경우 표현 가능한 범위에서 최소값으로 설정되고 최대값으로 설정된다. 결과가 최대값을 초과하는 경우 래핑되지 않고 표현 가능한 범위의 값이다.

오버플로 조건으로 인해 의도하지 않은 동작이 발생할 수 있다. 특히 가능성을 예상하지 못한 경우 오버플로로 인해 프로그램의 신뢰성과 보안이 손상될 수 있다.

타이머 및 클럭과 같은 일부 애플리케이션의 경우 오버플로 시 래핑하는 것이 바람직할 수 있다. C11 표준에는 부호 없는 정수의 경우 모듈로 래핑이 정의된 동작이며 오버플로라는 용어가 적용되지 않는다고 명시되어 있다. "부호 없는 피연산자와 관련된 계산은 오버플로될 수 없다."[1]

같이 보기

[편집]

각주

[편집]

외부 링크

[편집]