1

为什么在下面的代码片段中没有像我预期的那样打印 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;
}
4

3 回答 3

7

不是印刷有问题。你有整数溢出:

long long unsigned y = x * 1000000;

将其更改为:

long long unsigned y = x * 1000000ull;
于 2013-03-13T11:41:32.397 回答
4

因为 your xis not a long long,也不是1000000- 它仅long long在乘法之后转换为。

做吧1000000ULL,你会得到你想要的。

于 2013-03-13T11:42:04.453 回答
1

问题是 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;
 }

http://codepad.org/rLW8fGTA

于 2013-03-13T11:45:29.703 回答