c - long long Integer 的乘法错误是什么?

标签 c memory int long-integer

 #include<stdio.h>
 int main()
 {
     long long int t=8*9*100000000;// 8 zeros
     printf("%lld\n",t);
     return 0;
 }

给出结果: -1389934592


请回复

 #include<stdio.h>
 int main()
 {
     long long int t=8*9*1000000000; //9zeros
     printf("%lld\n",t);
     return 0;
 }

给出结果: -1014444032


而所有其他乘法都给出了正确的结果,即

 #include<stdio.h>
 int main()
 {
     long long int t=8*9*10000000000; //10zeros or greater or zeros <=6
     printf("%lld\n",t);
     return 0;
 }

给出结果: 720000000000


最佳答案

100000000 有 8 个零或 1000000000 有 9 个零适合 32 位 int(long,不是 long long),这是默认值。然后用 32 位 int 进行乘法运算,
然后然后将结果转换为 64 位。
这是一个问题,因为结果不适合 32 位 => 溢出。

有了 10 个零,你将从一开始就有一个 64 位 int
因为这个数字不适合 32 位 int
=> 计算是用 64 位完成的,没问题。

如果你想把8-0和9-0数作为long long,使用LL, IE。 100000000LL

关于c - long long Integer 的乘法错误是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30149127/

相关文章:

c - 更新队列并从队列中删除所需的内容

c - c中指针的声明

swift - 无法将类型 'Int64?' 的值转换为预期的参数类型 'Int'

string - Swift OS X 字符串到 Int 转换错误

c - 不要阅读 C 中文本的第一行

c - 如何在 C 编程中根据 char 变量命名结构

c - 用 GLib 替换文本

C++:缓存 JSON 而不是对象会减少内存消耗吗?

android - EditText 导致内存泄漏

python - 循环读取 XML 文件最终会导致内存错误