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

时间:2015-05-10 08:06:48

标签: 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

2 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:4)

8*9*1000000000; //9zeros  

是(32位)*(32位)*(32位) - &gt;答案是32位 而

8*9*10000000000; //10zeros

是(32位)*(32位)*(64位) - &gt;答案是信息64位