#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
为什么会出现这种行为!! :(
答案 0 :(得分:6)
在printf中使用不正确的格式说明符会调用未定义的行为。 long long
的正确格式说明符为%lld
。
还要确保代码中没有签名整数溢出,因为那也是UB。
答案 1 :(得分:1)
您应该在我的脑海中使用printf("%llx, %llx, abc\n", x, y);
。 %lx
表示长整数。