标题总结了:左移uint64_t并没有输出预期值,我想知道原因。我得到的是预期的结果,其中4个最重要的字节被清零。 我在Debian Jessie 64bit上使用x86_64 CPU(Intel i7 3770k)。这是一个重现相同行为的测试程序。
#include <stdio.h>
#include <stdint.h>
int main(int argc, char * * argv)
{
uint64_t var = 0xDEFEC8ED;
printf("%016x\n", var << 24);
return 0;
}
输出
00defec8ed000000 // expected
00000000ed000000 // obtained
答案 0 :(得分:3)
<input>
,您需要uint64_t
printf
这是不完全正确的,因为自C99以来有打印这些类型的特殊宏:
#include <stdio.h>
#include <stdint.h>
int main(int argc, char * * argv)
{
uint64_t var = 0xDEFEC8ED;
printf("%016llx\n", (unsigned long long)(var << 24));
return 0;
}
但你可能有也可能没有。
答案 1 :(得分:1)
替换:
printf("%016x\n", var << 24);
使用:
printf("%016llx\n", (var << 24));
另外,是uint_64还是uint64_t?