但是在 C + + 11 cstdint
文档中有一些有趣的东西:
有符号整数类型,宽度分别为8、16、32和64位,没有填充位和 用2的补数表示负数(仅在实现直接支持该类型时提供)
我的问题是: 既然标准明确规定对于 int8_t
、 int16_t
、 int32_t
和 int64_t
负数是2的补数,那么这些类型的溢出是否仍然是一种未定义行为?
编辑 我检查了 C + + 11和 C11标准,以下是我的发现:
C + + 11,18.4.1:
Header 定义了与 C 标准中的7.20相同的所有函数、类型和宏。
C11,7.20.1.1:
Typedef 名称
intN_t
表示带有符号整数类型,宽度为 N,没有填充位,以及一个二的补数表示形式。因此,int8_t
表示宽度正好为8位的这种有符号整数类型。