为什么此代码无法检查求和的溢出

时间:2019-01-02 09:15:03

标签: c unix

在CSAPP本书中,有一些代码(C语言)用于检查求和是否溢出。但是代码有错误,它询问为什么代码不起作用。

int tadd_ok(int x, int y) {
    int sum = x+y;
    return (sum-x == y) && (sum-y == x);
}

解决方案如下。

  

通过研究第2.3.2节,您的同事可以了解到   两个的补码加法组成一个阿贝尔群,因此表达式   (x+y)-x的评估结果为y,无论   加法运算会溢出,并且(x+y)-y的总取值为x

但是在阅读完本章和第2.3.2节之后,我仍然不知道为什么该代码有错误。编译器会在对表达式sum-x == y进行转换之前将其转换为(x+y)-x == y吗?

0 个答案:

没有答案