gpt4 book ai didi

c++ - 如何检查 A+B 是否超过 long long? (A和B都是长长的)

转载 作者:IT老高 更新时间:2023-10-28 21:39:00 26 4
gpt4 key购买 nike

我有两个数字:AB。我需要在代码中的某处计算 A+BAB都是long long,可以是正负

我的代码运行错误,我怀疑是在计算 A+B 时出现问题。我只是想检查 A+B 是否超过 long long 范围。所以,任何方法都是可以接受的,因为我只用它来调试。

最佳答案

只有当两个数字具有相同的符号时,才可能发生溢出。如果两者都是正数,那么如果在数学上 A + B > LLONG_MAX 或等效地为 B > LLONG_MAX - A,则会出现溢出。由于右手边是非负数,后一个条件已经暗示了 B > 0。类似的论点表明,对于否定的情况,我们也不需要检查 B 的符号(感谢 Ben Voigt 指出对 B 的符号检查是不必要的)。然后你可以检查

if (A > 0) {
return B > (LLONG_MAX - A);
}
if (A < 0) {
return B < (LLONG_MIN - A);
}
return false;

检测溢出。由于初始检查,这些计算不会溢出。

检查 A + B 结果的符号可以保证溢出整数计算的环绕语义。但是有符号整数的溢出是未定义的行为,即使在实现了回绕行为的 CPU 上,编译器也可能假设没有发生未定义的行为,并在实现时完全删除溢出检查。因此,问题评论中建议的检查非常不可靠。

关于c++ - 如何检查 A+B 是否超过 long long? (A和B都是长长的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15920639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com