【发布时间】:2015-01-11 00:10:20
【问题描述】:
这是未定义的行为吗?
unsigned int size = 0;
size -= 1;
【问题讨论】:
-
没有。 C 标准保证模幂二环绕。 6.2.5 Types 第 9 条说:涉及无符号操作数的计算永远不会溢出,因为无法由结果无符号整数类型表示的结果会以大于 1 的数为模减少结果类型可以表示的最大值。
-
在最近的一个问题中,这是一个有趣的问题,询问
int i = INT_MAX + 1;是否会导致 UB。但是关注@5gon12eder 我喜欢stackoverflow.com/questions/18195715/… -
@WeatherVane:我认为一个实现可以合法地定义它的数字类型,这样增加一个低于
int的类型的无符号值可能会产生未定义的行为,但我认为这不是真的递减。如果小于int的无符号值提升为int,则int将能够毫无困难地表示0 和-1;需要将有符号值 -1 强制为任何大小的无符号类型以产生该值,该值在转换为适当大的类型、递增和强制回退时将产生零。
标签: c undefined-behavior unsigned-integer