产生算术溢出

时间:2019-05-15 02:29:10

标签: c

为什么这两个值产生零输出。我以为应该产生算术溢出,但是像a和b一样有相反的符号。

#include <stdio.h>
// trying to generate an arithmetic overflow
int sum(int a, int b) {
    return a + b;
}
int main()
{
    int a=2147483648;
    int b=2147483648;
    printf("%d", sum(a,b));
    return 0;
}

1 个答案:

答案 0 :(得分:1)

对于特定计算机上的特定编译器;可以认为 animationView.setAnimationFromUrl ("https://gist.githubusercontent.com/Allanksr/d36c8a66ea24ec7df1ea422782fa7ae0/raw/bf1a65fc57b1db102893c80f0f3356e100e10a51/proxsensor.json") int a=2147483648;基本上相同,后者被视为int a=INT_MAX+1;,与int a=INT_MIN;相同,这导致int b实际上是例如“ 0x80000000 + 0x80000000 = 0x100000000 = 0x00000000有溢出”。

但是,以上所有内容都依赖于未定义的行为(假设未定义的行为在实践中偶然导致包装)。

一般而言;您想使用return INT_MIN+INT_MIN;(或什至更好的unsigned int)来避免未定义的行为并获得您希望的“预期溢出”。