C:预期产量

May*_*ank 1 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;
}
Run Code Online (Sandbox Code Playgroud)

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

但是,如果我改变printfprintf("%lld, %lx, abc\n", x, y);

输出变为:
2363797867,ce4b16b0,abc

为什么会出现这种情况!! :(

Pra*_*rav 6

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

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