在x + y中获取"携带"

Cla*_*bel 5 c c++ math

可能重复:
在C/C++中检测整数溢出的最佳方法

如果我有一个表达式x + y(在C或C++中)where xy都是uint64_t导致整数溢出的类型,我如何检测它(进位),位置溢出多少,而不是另一个变量,然后计算余数?

Him*_*ury 10

假设您使用的是无符号整数,则余数将已存储在x + y的总和中.无符号整数溢出导致环绕(未定义有符号整数溢出).请参阅评论中Pascal的标准参考.

溢出只能是1位.如果添加2个64位数,则进位位不能超过1,因此您只需要检测溢出条件.

对于如何检测溢出,有一个关于该主题的先前问题:检测整数溢出的最佳方法.

  • @Clark在C中只有未定义的有符号溢出(可能与C++相同).无符号溢出被指定为给出模数结果(最大可表示的整数+ 1). (3认同)
  • C99 6.2.5.9:"涉及无符号操作数的计算永远不会溢出,因为无法用结果无符号整数类型表示的结果以模数减少为模数,该数字大于可由结果类型表示的最大值. " (3认同)