gpt4 book ai didi

c - 产生算术溢出

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:17 26 4
gpt4 key购买 nike

为什么这两个值产生零输出。我认为它应该会产生算术溢出但表现得像 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;
}

最佳答案

针对您特定计算机上的特定编译器; int a=2147483648;int a=INT_MAX+1; 本质上是一样的,后者被视为 int a=INT_MIN; ,对于 int b 也是如此,这会导致 return INT_MIN+INT_MIN; 这实际上类似于“0x80000000 + 0x80000000 = 0x100000000 = 0x00000000 溢出”。

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

一般来说;您想使用 unsigned int(或者更好,uint32_t)来避免未定义的行为并获得您希望的“预期溢出”。

关于c - 产生算术溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56141000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com