我在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/