我试图通过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;
}
它输出正确!
为什么会这样?
答案 0 :(得分:9)
表达式75000 * 75000
是两个整数常量的乘法。该表达式的结果也是一个整数,可以溢出。然后将结果分配给无符号长long,但它已经溢出,因此结果是错误的。
要编写无符号长long常量,请使用ULL
后缀。
x = 75000ULL * 75000ULL;
现在乘法不会溢出。