#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
答案 0 :(得分:7)
100000000
有8个零或1000000000
有9个零符合32位int
(long
,而不是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位