C / C ++中两个INT_MAX numbes的错误产品

时间:2012-02-29 18:16:00

标签: c++ c overflow printf multiplication

就我而言,两个INT_MAX号码的乘积为296447233,这是不正确的。

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

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

2 个答案:

答案 0 :(得分:14)

您的2137483647都属于int类型。所以他们保持这种类型并且溢出。

让他们long long s:

product = 2137483647LL * 2137483647LL;

或演员:

product = (long long)2137483647 * 2137483647;

答案 1 :(得分:6)

尝试

product = 2137483647LL * 2137483647LL; 

确保编译将数字视为长的