众所周知,有符号整数溢出是未定义的行为。但是C ++ 11cstdint
文档中有一些有趣的东西:
有符号整数类型,其宽度分别精确地为8、16、32和64位,没有填充位,并且对负值使用2的补码(仅在实现直接支持该类型时提供)
这里是我的问题:由于标准明确地说,对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,无填充位和二进制补码表示形式的带符号整数类型。因此,int8_t
表示具有正好8位宽度的这种有符号整数类型。