我在网站上看到了多个解决无符号整数上溢/下溢的问题。大多数关于下溢的问题都涉及将负数分配给无符号整数。我不清楚的是当unsigned int
从另一个中减去一个时会发生什么,unsigned int
例如a - b
结果是否定的。该标准的相关部分是:
涉及无符号操作数的计算永远不会溢出,因为无法由结果无符号整数类型表示的结果会以比结果类型可以表示的最大值大一的数字为模减少。
在这种情况下,您如何解释“减少”?这是否意味着将UINT_MAX+1
其添加到否定结果中,直到它是>= 0
?
我看到这个问题解决了要点(基本上说标准选择谈论溢出,但关于模的要点也适用于下溢)但我仍然不清楚:
说结果a-b
是-1
;根据标准,操作-1%(UINT_MAX+1)
将返回(如此处-1
解释);所以我们回到了我们开始的地方。
这可能过于迂腐了,但是这个模是否意味着数学模而不是 C 的计算模?