我在C中看到了一个有缺陷的代码,用于检查添加是否导致溢出.它工作正常char,但在参数出现时给出错误的答案int,我无法理解为什么.
这是带short参数的代码.
short add_ok( short x, short y ){
short sum = x+y;
return (sum-x==y) && (sum-y==x);
}
Run Code Online (Sandbox Code Playgroud)
这个版本工作正常,当您更改参数时出现问题int(您可以查看INT_MAX)
你能看到这里有什么问题吗?
在您的代码中,除非大小相同,否则添加不会溢出.由于默认促销,对值和升级执行,然后结果将以实现定义的方式截断.intshortx+yxyintshort
为什么不简单地做: return x+y<=SHRT_MAX && x+y>=SHRT_MIN;
| 归档时间: |
|
| 查看次数: |
1709 次 |
| 最近记录: |