为什么在下面的代码片段中没有像我预期的那样打印 long long 值?
#include <stdio.h>
int main()
{
int x = 1363177921;
long long unsigned y = x * 1000000;
printf("y: %llu\n", y); // Why is 1363177921000000 not printed?
return 0;
}
为什么在下面的代码片段中没有像我预期的那样打印 long long 值?
#include <stdio.h>
int main()
{
int x = 1363177921;
long long unsigned y = x * 1000000;
printf("y: %llu\n", y); // Why is 1363177921000000 not printed?
return 0;
}
不是印刷有问题。你有整数溢出:
long long unsigned y = x * 1000000;
将其更改为:
long long unsigned y = x * 1000000ull;
因为 your x
is not a long long
,也不是1000000
- 它仅long long
在乘法之后转换为。
做吧1000000ULL
,你会得到你想要的。
问题是 x 是 int 并且 1000000 会很长。现在编译器会将它们乘以 2 long,然后将结果转换为 long long
要解决在 x 或 100000 之前添加隐式类型转换或将 x 转换为 long long 的问题,如下所示
#include <stdio.h>
int main()
{
int x = 1363177921;
long long unsigned y = (long long )x * 1000000;
printf("y: %llu\n", y); // Why is 1363177921000000 not printed?
return 0;
}