Dlaczego zachowuje się zdefiniowane przekroczenie liczby całkowitej bez znaku, ale przepełnienie całkowitoliczbowe nie jest?

Przepełnienie liczby całkowitej bez podpisu jest dobrze zdefiniowane zarówno przez standardy C, jak i C ++. Na przykładStandard C99 (§6.2.5/9) stany

Obliczenia obejmujące niepodpisane operandy nigdy nie mogą przepłynąć, ponieważ wynik, który nie może być reprezentowany przez wynikowy typ liczby całkowitej bez znaku, jest zmniejszany o liczbę, która jest o jeden większa niż największa wartość, która może być reprezentowana przez wynikowy typ.

Oba standardy stwierdzają jednak, że przekroczenie liczby podpisanej liczby całkowitej jest zachowaniem niezdefiniowanym. Ponownie od standardu C99 (§3.4.3/1)

Przykładem niezdefiniowanego zachowania jest zachowanie nad przepływem całkowitym

Czy istnieje jakaś historyczna lub (jeszcze lepsza!) Techniczna przyczyna tej rozbieżności?

questionAnswers(5)

yourAnswerToTheQuestion