刷 csapp 碰到的一道的练习题.
书中要求写一个带有两个整形参数的函数,要求判断是否会发生溢出,书中给出了一段错误代码,问我为什么这么判断是错误的,我只能举出反例,却说不上为什么.代码如下:
#include<stdio.h>
int tadd_ok(int x, int y){
int sum = x + y;
return (sum - x == y) && (sum - y == x);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我自己尝试着解释了一下, 不知道正不正确
上述代码不能用来检测有符号数溢出,补码加会形成一个阿贝尔群,因此表达式(x+y)-x求值得到 y,无论加法是否溢出,而 (x+y)-y 总是会求值得到 x
证明过程:
http://hi.csdn.net/attachment...
整形加法本来就有可能溢出啊
难道不是永远返回
非0值
吗