C:预期产量

时间:2011-05-20 12:34:17

标签: c printf

#include <stdio.h>
int main()
{
    long long x = 0x8ce4b16b;
    long long y = x<<4;
    printf("%lx, %lx, abc\n", x, y);
    return 0;
}

我得到了 8ce4b16b,0,abc ......这没关系吗?

但是,如果我像printf

那样更改printf("%lld, %lx, abc\n", x, y);

输出变为:
2363797867,ce4b16b0,abc

为什么会出现这种行为!! :(

2 个答案:

答案 0 :(得分:6)

在printf中使用不正确的格式说明符会调用未定义的行为。 long long的正确格式说明符为%lld

还要确保代码中没有签名整数溢出,因为那也是UB。

答案 1 :(得分:1)

您应该在我的脑海中使用printf("%llx, %llx, abc\n", x, y);%lx表示长整数。