gpt4 book ai didi

C中更高值的计算

转载 作者:行者123 更新时间:2023-12-05 03:26:56 25 4
gpt4 key购买 nike

以下代码无法正常工作。我想让它打印出 20 亿 + 20 亿的总和。即使我在这里使用 long,我也无法得到正确的答案。

#include<stdio.h>
#include<stdlib.h>

int main(void){

long a = 2000000000;
long b = 2000000000;

printf("%li\n",a + b);

return 0;
}

当我运行这个程序时,我得到了值 -294967296。我正在使用 VS Code IDE、Mingw 编译器和 Windows 版本是 Windows 11。

最佳答案

long至少 32 位并且它的范围必须至少 +/- 231 - 1 或 +/-2,147,483,647。

在某些机器上,long 更宽,例如 [-263 ...263 - 1].

在 OP 的机器上,它是 [-231 ... 231 - 1]。


对于OP。 a + b 发生有符号整数 溢出,在未定义行为 (UB) 中,两个long 的总和在外部 范围。一个常见的结果是总和被“包装”并导致 long 为 -294,967,296,尽管许多其他结果也是可能的,包括代码崩溃。


要处理像 4,000,000,000 这样的总和,请使用 unsigned long 数学执行加法,其最小范围为 [0 ... 232 - 1] 或使用 long long

// printf("%li\n",a + b);
printf("%lli\n",0LL + a + b);

或者……

long long  a = 2000000000;
long long b = 2000000000;
printf("%lli\n",a + b);

关于C中更高值的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71568752/

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