long long Integer相乘的错误是什么?

Shivam Chauhan
 #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位intlong,不是long long)都适合,这是默认设置。然后乘法与32位制作int的,
并且然后结果被转换为64位。
这是一个问题,因为结果将不适合32bit => Overflow。

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

如果您希望将8零和9零的数字用作long long,请使用LL100000000LL

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章