#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位。
这是一个问题,因为结果将不适合32bit => Overflow。
有了10个零,您int
从一开始就将拥有64位,
因为该数字不适合32位int
。
=>计算是使用64位完成的,没问题。
如果您希望将8零和9零的数字用作long long
,请使用LL
。100000000LL
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句