为什么这两个值产生零输出。我以为应该产生算术溢出,但是像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;
}
答案 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
)来避免未定义的行为并获得您希望的“预期溢出”。