在下面的代码中,prod的值不是9,000,000;它获得了垃圾值。为什么我们需要num1和num2为long类型?
#include <stdio.h>
int main()
{
int num1 = 3000, num2 = 3000;
long int prod = num1 * num2;
printf("%ld\n", prod);
return 0;
}
答案 0 :(得分:9)
当计算num1 * num2时,它存储在一个相同类型的中间变量(即一个int)中,它变成了垃圾,因为它不够大。然后,中间变量存储在long int中,但计算出的答案已经变成了垃圾。
解决方案是投射乘法的一个参数。
long int prod = (long int)num1 * num2;
这样,中间计算将使用两种类型中较大的一种,并将其临时存储为long int。