c - 当乘以 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;
}

但它只是说

[Warning] integer overflow in expression [-Woverflow]

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

最佳答案

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

问题在于,由于所有输入值都是 int,因此只会执行 int 大小的乘法(然后,如果将其分配给 double 或其他什么,结果被转换为 double——但只有它已经溢出。

如果您开始一个更大的类型,那么乘法将用那个更大的类型完成:

#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;
}

关于c - 当乘以 13 位数字时,表达式中的整数溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54175172/

相关文章:

c - 打印到 C 中的文件

c++ - 在c/c++中使用变量作为对象名称的方法

c - 结构字符未正确分配

python - 在 C 程序中嵌入 Python 模块时,如何将 C 结构传递到 Python 中

c++ - 对于我的关键代码部分,如何在短时间内关闭操作系统中切换线程的中断?

c - 特定情况下的段错误(核心转储)

c++ - 通过 C 绑定(bind)公开 C++ 库

c - 段错误和打印没有循环的数组

c - 相同地址不同值

c - 使用msg_accrights在进程之间发送&fd是一个bug吗?