gpt4 book ai didi

c - 如何将两个32位整数组合成一个64位整数?

转载 作者:太空狗 更新时间:2023-10-29 16:26:16 25 4
gpt4 key购买 nike

我有一个计数寄存器,它由两个 32 位无符号整数组成,一个用于值的高 32 位(最高有效字),另一个用于值的低 32 位(最低有效字) ).

在 C 中,将这两个 32 位无符号整数组合起来然后显示为大数的最佳方法是什么?

具体来说:

leastSignificantWord = 4294967295; //2^32-1

printf("Counter: %u%u", mostSignificantWord,leastSignificantWord);

这会打印得很好。

当数字增加到 4294967296 时,leastSignificantWord 删除为 0,mostSignificantWord(最初为 0)现在为 1。整个计数器现在应该读取 4294967296,但现在它只读取 10,因为我' m 只是连接 mostSignificantWord 中的 1 和 leastSignificantWord 中的 0。

我应该如何让它显示 4294967296 而不是 10?

最佳答案

在这种情况下,使用具有明确大小的无符号整数可能是有利的:

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

int main(void) {
uint32_t leastSignificantWord = 0;
uint32_t mostSignificantWord = 1;
uint64_t i = (uint64_t) mostSignificantWord << 32 | leastSignificantWord;
printf("%" PRIu64 "\n", i);

return 0;
}
输出

4294967296

分解(uint64_t) mostSignificantWord << 32 | leastSignificantWord

  • (typename)typecasting在 C 中。它将值数据类型更改为 typename .

    (uint64_t) 0x00000001 -> 0x0000000000000001

  • <<left shift .在 C 中,无符号整数左移执行 logical shift .

    0x0000000000000001 << 32 -> 0x0000000100000000

left logical shift

  • |'bitwise or' (操作数位的逻辑或)。

    0b0101 | 0b1001 -> 0b1101

关于c - 如何将两个32位整数组合成一个64位整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2768890/

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