아시다시피 부호있는 정수 오버플로는 정의되지 않은 동작 입니다. 그러나 C ++ 11 cstdint
문서 에는 흥미로운 것이 있습니다.
패딩 비트가없고 음수 값에 대해 2의 보수를 사용 하는 정확히 8, 16, 32 및 64 비트 너비의 부호있는 정수 유형 (구현이 유형을 직접 지원하는 경우에만 제공됨)
그리고 여기 제 질문은 : 표준가 있음을 명시 적으로 말한다 이후 int8_t
, int16_t
, int32_t
와 int64_t
부정적인 번호 2의 보완, 여전히 오버 플로우 이러한 유형의 정의되지 않은 행동입니까?
편집 C ++ 11 및 C11 표준을 확인했으며 여기에 내가 찾은 내용이 있습니다.
C ++ 11, §18.4.1 :
헤더는 C 표준의 7.20과 동일하게 모든 기능, 유형 및 매크로를 정의합니다.
C11, §7.20.1.1 :
typedef 이름
intN_t
은 너비가 N이고 패딩 비트가없고 2의 보수 표현이있는 부호있는 정수 유형을 지정합니다. 따라서int8_t
는 너비가 정확히 8 비트 인 부호있는 정수 유형을 나타냅니다.