long long Integer乘法中的错误是什么?

Shi*_*han 4 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;
 }
Run Code Online (Sandbox Code Playgroud)

给出结果: -1389934592


请回复

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

给出结果: -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;
 }
Run Code Online (Sandbox Code Playgroud)

给出结果: 720000000000


dev*_*fan 7

1000000008个零或10000000009个零符合32位int(long,不是long long),这是默认值.然后乘法与32位制作int的,
并且然后结果被转换为64位.
这是一个问题,因为结果不适合32位=>溢出.

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

如果您希望使用8-zero和9-zero数字long long,请使用LL,即.100000000LL