为什么长长的值不能正确打印?

时间:2013-03-13 11:39:49

标签: c++ printf long-integer

为什么长长的值没有像我期望的那样打印在以下代码片段中?

#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;
}

3 个答案:

答案 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;
 }

http://codepad.org/rLW8fGTA