long long Integer 的乘法错误是什么?
What is the error in multiplication of long 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
100000000
有 8 个零或 1000000000
有 9 个零适合 32 位 int
(long
,而不是 long long
),这就是默认值。然后用 32 位 int
´s,
进行乘法运算
然后 然后 结果被转换为 64 位。
这是一个问题,因为结果不适合 32 位 => 溢出。
有了 10 个零,您将从一开始就有一个 64 位 int
,
因为这个数字不适合 32 位 int
.
=> 计算是用 64 位完成的,没问题。
如果要将 8 零和 9 零数字用作 long long
,请使用 LL
,
IE。 100000000LL
8*9*1000000000; //9zeros
是(32bit) * (32bit) * (32bit) --> 答案放入32bit
而
8*9*10000000000; //10zeros
是 (32bit) * (32bit) * (64bit) --> 答案是 put info 64bit
#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
´s,
进行乘法运算
然后 然后 结果被转换为 64 位。
这是一个问题,因为结果不适合 32 位 => 溢出。
有了 10 个零,您将从一开始就有一个 64 位 int
,
因为这个数字不适合 32 位 int
.
=> 计算是用 64 位完成的,没问题。
如果要将 8 零和 9 零数字用作 long long
,请使用 LL
,
IE。 100000000LL
8*9*1000000000; //9zeros
是(32bit) * (32bit) * (32bit) --> 答案放入32bit 而
8*9*10000000000; //10zeros
是 (32bit) * (32bit) * (64bit) --> 答案是 put info 64bit