gpt4 book ai didi

c - 如何在C中执行64位左移

转载 作者:太空宇宙 更新时间:2023-11-04 05:50:07 25 4
gpt4 key购买 nike

我正在尝试将两个 32 位值复制到一个 64 位地址中。一个 DWORD 是高 32 位,第二个是低 32 位。我尝试了以下但 64 位值中的移位操作数不起作用:

UINT64 a = 0x12341234;
UINT64 b = 0x00003800;

我需要的值是:0x0000380012341234

所以我做了:

printf("b 0x%016x\n", b);
b = ((UINT64)b) << 20;
printf("b 0x%016x\n", b);

以及我得到的指纹:

b 0x0000000000003800

b 0x0000000080000000

我尝试换成不同的数字(10 和 10,或 32,或 0x20),但对我没有任何效果。

为什么转换到 UINT64 的高 32 位不起作用,我还能怎么做?

最佳答案

你的格式说明符告诉 printf 这个参数是一个普通的(可能是 32 位的)int 所以它切断了前 32 位(因为你的计算机必须是小端).

您可以使用 %llx,但如果是这样,我很想也将参数转换为 unsigned long long

printf("b 0x%016llx\n", (unsigned long long)b);

C11 还在 inttypes.h 中定义了一些固定宽度的格式说明符,以使其在没有转换的情况下安全 - PRIx64 是您需要的。

关于c - 如何在C中执行64位左移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44178451/

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