有符号整数溢出是否仍然是C+中未定义的行为?我们知道,有符号整数溢出是未定义的行为。..但是在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节:标头定义了与C标准中的7.20相同的所有函数、类型和宏。C11,第7.20.1.1节:类型胡枝子名称intN_t指定带符号整数类型,其宽度为N,没有填充位,并指定两个补码表示形式。因此,int8_t表示这样一个带符号整数类型,宽度正好为8位。
3 回答
三国纷争
TA贡献1804条经验 获得超7个赞
1.3.24未定义的行为
本国际标准不要求的行为
[注意:如果本国际标准遗漏了任何明确的行为定义,或者当程序使用错误的构造或错误的数据时,可能会出现未定义的行为。允许的未定义行为包括:完全忽略这种情况而导致不可预测的结果;在翻译或程序执行过程中以具有环境特征的记录方式(无论是否发布诊断消息);终止翻译或执行(通过发布诊断消息)。许多错误的程序构造不会产生未定义的行为;它们需要被诊断。
狐的传说
TA贡献1804条经验 获得超3个赞
这些类型的溢出是否仍然是未定义的行为?
是。
如果在计算表达式时,结果没有数学定义,或者不在其类型的可表示值范围内, 行为未定义. [...]
无符号整数,声明 unsigned
, 应遵守算术模2^n定律其中n是该整数特定大小的值表示中的位数。
46)这意味着 未签名算术不会溢出,因为不能用结果无符号整数类型表示的结果将被减少,即大于结果无符号整数类型所能表示的最大值的数字。
- 3 回答
- 0 关注
- 301 浏览
添加回答
举报
0/150
提交
取消