众所周知,有符号整数溢出是未定义的行为。但是 C++11cstdint
文档中有一些有趣的东西:
有符号整数类型,宽度分别为 8、16、32 和 64 位,没有填充位,负值使用 2 的补码(仅在实现直接支持该类型时提供)
这是我的问题:由于标准明确规定 for int8_t
、int16_t
和负数是 2 的补码,这些类型的溢出仍然是未定义的行为吗int32_t
?int64_t
编辑我检查了 C++11 和 C11 标准,这是我发现的:
C++11,第 18.4.1 节:
头文件定义了与 C 标准中的 7.20 相同的所有函数、类型和宏。
C11,§7.20.1.1:
typedef 名称
intN_t
指定宽度为 N、无填充位和二进制补码表示的有符号整数类型。因此,int8_t
表示这样一个宽度正好为 8 位的有符号整数类型。