gpt4 book ai didi

c - 左移 uint64_t 将最重要的双字清零

转载 作者:太空宇宙 更新时间:2023-11-04 06:18:45 24 4
gpt4 key购买 nike

标题总结如下:左移 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//预期
00000000ed000000//获得

最佳答案

它是 uint64_t 并且您需要为 printf

使用不同的类型
#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;
}

这并不完全正确,因为自 C99 以来有用于打印这些类型的特殊宏:

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main(int argc, char * * argv)
{
uint64_t var = 0xDEFEC8ED;

printf("%016" PRIX64 "\n", var << 24);

return 0;
}

但你可能有也可能没有。

关于c - 左移 uint64_t 将最重要的双字清零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40045972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com