【问题标题】:Incorrect product of two INT_MAX numbes in C/C++C/C++ 中两个 INT_MAX 数的乘积不正确
【发布时间】:2012-02-29 18:16:00
【问题描述】:

在我的例子中,两个 INT_MAX 数字的乘积是296447233,这是不正确的。

long long int product = 0;
product = 2137483647 * 2137483647;
printf("product: %lli\n", product);

我做错了什么,如何纠正? 谢谢!

【问题讨论】:

  • 嗯...INT_MAX 是 2147483647(对于 32 位整数)。你害羞了 10000000。
  • 哦,不!!!!是的,我弄错了 INT_MAX。感谢您指出!

标签: c++ c overflow printf multiplication


【解决方案1】:

您的两个2137483647 都是int 类型。所以他们保持这种类型并溢出。

让他们long longs:

product = 2137483647LL * 2137483647LL;

或演员:

product = (long long)2137483647 * 2137483647;

【讨论】:

  • 所以,基本上,两个整数的乘积会溢出,即使我将它分配给 long long int ?感谢您的回答!
  • 正确。在您的示例中,转换发生在乘法之后。所以它在升级到long long之前就溢出了。
  • 编译器会将这两个数字视为整数,进行数学运算,然后考虑将值放入product
【解决方案2】:

试试

product = 2137483647LL * 2137483647LL; 

以确保编译将数字视为 long long

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    相关资源
    最近更新 更多