溢出产品的整数

时间:2010-09-21 21:42:05

标签: c overflow

在下面的代码中,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;
}

1 个答案:

答案 0 :(得分:9)

当计算num1 * num2时,它存储在一个相同类型的中间变量(即一个int)中,它变成了垃圾,因为它不够大。然后,中间变量存储在long int中,但计算出的答案已经变成了垃圾。

解决方案是投射乘法的一个参数。

long int prod = (long int)num1 * num2;

这样,中间计算将使用两种类型中较大的一种,并将其临时存储为long int。