c - C中的二进制补码加法溢出

标签 c debugging

我在C 中看到一个错误的代码,用于检查加法是否导致溢出。它适用于 char,但当参数为 int 时给出错误答案,我不明白为什么。
这是带有 short 参数的代码。

short add_ok( short x, short y ){
    short sum = x+y;
    return (sum-x==y) && (sum-y==x);
}

此版本工作正常,当您将参数更改为 int 时出现问题(您可以使用 INT_MAX 进行检查)
你能看出这里有什么问题吗?

最佳答案

因为在 2s 补码中,整数可以排列成一个圆圈(在 modulo arithmetic 的意义上)。添加 y 然后减去 y 总是让你回到你开始的地方(尽管有未定义的行为)。

关于c - C中的二进制补码加法溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11460288/

相关文章:

c - 试图从套接字读取,但它阻塞了 while 循环

c++ - "type"使用 C++ 的表情符号

c++ - 将程序集移植到 C/C++?

mysql - 识别 MySQL "Integrity constraint violation"(1022) 消息中的错误外键

c++ - 如何使用 GDB 获取有关异常的更多信息?

javascript - 调试node.js时出现"breakpoint set but not yet bound"错误

android - 使用 Gstreamer 播放 PCM 文件

c - Get and Set ("private") 在 C 中的缺点?

C 在使用 dup2 后打印默认标准输入中的文件

c++ - 调试嵌入式 Lua 5.2.2 代码