c - 合并十六进制值中的位

标签 c bit-manipulation

我有两个 uint32_t 变量。 这些具有以下值 -

uint32_t a = 0x00002000;
uint32_t b = 0x00c00000;

我希望合并这两个变量,以便它们给出结果 0000200c

如果我只是执行 a+b,它不会返回正确的结果。有人可以帮忙吗?

编辑 - 我需要将 b 的第 31-20 位放入 a 的第 11-0 位。

最佳答案

b 的第 31-20 位可以通过执行 (b & 0xFFF00000) 来隔离。

a 的第 11-0 位可以通过执行 (a & 0x00000FFF) 来隔离。

然后需要将b变量右移20位,然后再与a组合。把它们放在一起,你得到

uint32_t answer = ((b & 0xFFF00000) >> 20) | (a & 0x00000FFF);

关于c - 合并十六进制值中的位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33430260/

相关文章:

c - 抽象语法树的代数化简

c - 从 64 位值获取最后两个字节

algorithm - 提取 ASCII 整数的前 32 位

c - 动态数组的收缩因子?

C 通过管道连接到另一个程序的 STDIN 并执行

c - 如何防止 ARM Compiler 5 armcc 内联汇编程序中的 LDM/STM 指令扩展?

c - 按位乘法得到结果

c - 向右移动/我做错了什么?

python - 为什么 matplotlib 的 Slider 只允许 0-7 的范围?

c - 按值管理函数参数与引用内存管理