> 백엔드 개발 > C++ > C에서 부호 있는 정수와 부호 없는 정수의 오버플로 동작은 무엇입니까?

C에서 부호 있는 정수와 부호 없는 정수의 오버플로 동작은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-29 07:13:15
원래의
170명이 탐색했습니다.

What is the Overflow Behavior of Signed and Unsigned Integers in C  ?

C의 부호 있는 정수에 대한 오버플로 동작

C에서 C와 마찬가지로 부호 있는 정수 오버플로는 정의되지 않은 동작입니다. 이는 오버플로되는 표현식의 결과가 표준에 의해 지정되지 않으며 컴파일러가 구현에 정의된 방식으로 이를 자유롭게 처리할 수 있음을 의미합니다. 그러나 C 11에서는 int8_t, int16_t, int32_t 및 int64_t와 같은 "고정 너비 정수" 유형 개념을 도입했습니다.

고정 너비 정수 유형

이러한 유형은 2의 보수 표현을 사용하여 음수가 표현되도록 보장합니다. 이는 이러한 유형에 대한 산술 연산이 모듈로 2^n으로 동작할 수 있음을 나타냅니다. 여기서 n은 정수의 너비입니다. 그러나 그렇지 않습니다.

고정 너비 유형의 오버플로 동작

고정 너비 유형의 경우에도 부호 있는 정수 오버플로는 정의되지 않은 동작으로 유지됩니다. C 11 표준(5/4항)에서는 표현식의 결과가 수학적으로 정의되지 않았거나 표현할 수 없는 값인 경우 동작이 정의되지 않은 것으로 명시적으로 명시합니다.

부호 없는 정수 오버플로

부호 있는 정수 오버플로와 달리 부호 없는 정수 오버플로는 고정 너비 유형에 대해 명시적으로 정의됩니다. C 11 표준의 단락 3.9.1/4에 따르면 부호 없는 산술은 산술 모듈로 2^n의 법칙을 따릅니다. 각주 46에서는 결과가 표현 가능한 최대 값의 모듈로로 감소되므로 부호 없는 정수 연산이 오버플로되지 않음을 명시합니다.

결론

고정 너비 유형에 대해 2의 보수 표현을 사용함에도 불구하고, 부호 있는 정수 오버플로는 정의되지 않은 동작으로 유지됩니다. 반면에 부호 없는 정수 오버플로는 잘 정의되어 있으며 모듈로 산술을 따릅니다. 이 차이점은 C에서 부호 있는 정수 유형과 부호 없는 정수 유형 간의 근본적인 차이를 강조합니다.

위 내용은 C에서 부호 있는 정수와 부호 없는 정수의 오버플로 동작은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿