C ++中的长整数溢出

时间:2017-07-02 19:31:14

标签: c++

为什么下面的代码给出整数溢出警告:

#include <stdio.h>

int main()
{
    long long int x = 100000 * 99999;
    return 0;
}

以下代码完美无缺:

#include <stdio.h>

int main()
{
    long long int x = 100000000000000;
    return 0;
}

3 个答案:

答案 0 :(得分:4)

因为这里

long long int x = 100000 * 99999;

两个整数相乘。尝试

long long int x = 100000LL * 99999;

答案 1 :(得分:1)

让警告消失100000LL * 99999LL

答案 2 :(得分:0)

您应该阅读thisthis

  

整数文字的类型是值的第一种类型   可以适合,取决于哪个数字类型的类型列表   以及使用了哪个整数后缀。

(感谢@UnHolySheep让我注意到它)。  如果您希望编译器以不同的方式解释您的文字,则必须添加后缀。例如,使用int,您可以添加LLll来指定它是long long int。对于无符号数字,后缀为u

使用浮点文字时,它是相同的:默认类型为double,但如果您想要float,则可以轻松使用{{1} }(或f)后缀。使用浮点,您甚至可以使用指数代表(使用f)。