标题总结了它:左移 uint64_t 不会输出预期值,我想知道为什么。我得到的是预期的结果,它的 4 个最重要的字节被清零。我在 Debian Jessie 64 位上使用 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