乘以13位数字时表达式中的整数溢出

时间:2019-01-14 02:37:13

标签: c

这只是一个测试C程序,我希望它计算13位数字的乘积

#include <stdio.h>
#include <stdlib.h>
int main ()
{
    long prod; 
    prod = 5*5*7*6*6*8*9*6*6*4*8*9*5;
    printf ("%ld\n", prod);
    system("pause");
    return 0;
}

但它只是说

  

[警告]表达式[-Woverflow]中的整数溢出

该程序运行了,但是它显示的产品价值与真实的价值截然不同...我试图将int和long int更改为float和double,但不确定下一步该怎么做。

1 个答案:

答案 0 :(得分:4)

在这种情况下,更改结果的类型无济于事。

问题在于,由于所有输入值均为int,因此仅进行过int大小的乘法(然后,如果将其分配给double或其他任何值,结果会转换为double-但只有之后溢出。

如果您以较大的类型 start 开始,则乘法将以该较大的类型完成:

#include <stdio.h>
#include <stdlib.h>
int main ()
{
    unsigned long long prod; 
    prod = 5ull*5*7*6*6*8*9*6*6*4*8*9*5;
    printf ("%llu\n", prod);
    system("pause");
    return 0;
}