为什么长长的值没有像我期望的那样打印在以下代码片段中?
#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;
}
答案 0 :(得分:7)
这不是印刷的错误。你有整数溢出:
long long unsigned y = x * 1000000;
将其更改为:
long long unsigned y = x * 1000000ull;
答案 1 :(得分:4)
由于您的x
不是long long
,也不是1000000
,因此在乘法后它仅转换为long long
。
制作1000000ULL
,你就会得到你想要的东西。
答案 2 :(得分:1)
问题是x是int而1000000将是长的。现在编译器将它们乘以2乘以它然后将结果转换为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;
}