부호없는 정수 오버플로는 C 및 C ++ 표준에 의해 잘 정의됩니다. 예를 들어 C99 표준 ( §6.2.5/9
) 상태
결과 부호없는 정수 유형으로 표현할 수없는 결과는 결과 유형으로 표현할 수있는 가장 큰 값보다 1이 큰 수의 모듈로 감소되기 때문에 부호없는 피연산자가 포함 된 계산은 절대로 흐르지 않습니다.
그러나 두 표준 모두 부호있는 정수 오버플로는 정의되지 않은 동작이라고 명시하고 있습니다. 다시 C99 표준 ( §3.4.3/1
)에서
정의되지 않은 동작의 예는 정수 오버 플로우에서의 동작입니다.
이 불일치에 대한 역사적 또는 더 나은 기술적 이유가 있습니까?
if (a + b < a)
). 곱하기의 오버플로는 부호있는 유형과 부호없는 유형 모두에 어렵습니다.
MAX_INT+1 == -0
, 두의에이 될 것이다 보완하면서INT_MIN