c++ - 检查 C++ 中的下溢/溢出?

标签 c++ overflow integer-overflow underflow

是否有通用的方法来检查给定数据类型(uint32、int 等)的上溢或下溢?

我正在做这样的事情:

uint32 a,b,c;
... //initialize a,b,c
if(b < c) {
   a -= (c - b)
}

当我在一些迭代后打印 a 时,它会显示一个大数字,例如:4294963846。

最佳答案

要检查算术上溢/下溢,请将结果与原始值进行比较。

uint32 a,b;
//assign values
uint32 result = a + b;
if (result < a) {
    //Overflow
}

对于您的具体检查将是:

if (a > (c-b)) {
    //Underflow
}

关于c++ - 检查 C++ 中的下溢/溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2399269/

相关文章:

c++ - 返回相同值的两个 Arduino 类实例

java - 无法通过 UDP protobuf 将大于 127 的整数值从 C++ 发送到 Java

c++ - 为什么我在这个简单的代码中得到 "ld: warning: direct access in _main to global weak symbol"?

internet-explorer - 文本溢出 :ellipsis doesn't work on IE

在递归函数中捕获整数溢出 [C]

java - 重新哈希方法抛出 NullPointerException

oracle - 如何在 PL/SQL 中模拟 32 位有符号整数溢出?

c++ - 黑/白 PRLock 和 PRRWLock 有什么区别

c - 如果我们将最大的可表示整数加一,结果是否为负数?

clojure - 在 Clojure 中使用惰性序列的整数溢出