合并十六进制值中的位

Merge bits from hex value

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

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

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

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

编辑 - 我需要将 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);