5

我试图通过 gcc 编译器执行这段代码:

#include <stdio.h>
int main()
{
    unsigned long long int x;
    x = 75000 * 75000;
    printf ("%llu\n", x);
    return 0;
}

但它给出了错误的输出。

然后我尝试了这个:

#include <stdio.h>
int main()
{
    unsigned long long int x;
    x = (unsigned long long)75000 * (unsigned long long)75000;
    printf ("%llu\n", x);
    return 0;
}

它给出了正确的输出!

为什么会这样?

4

1 回答 1

9

表达式75000 * 75000是两个整数常量的乘积。这个表达式的结果也是一个整数,可以溢出。然后将结果分配给 unsigned long long,但它已经溢出,因此结果是错误的。

要编写 unsigned long long 常量,请使用ULL后缀。

x = 75000ULL * 75000ULL;

现在乘法不会溢出。

于 2012-06-17T08:09:24.273 回答