C 从十六进制值合并位
我有两个uint32\t变量。 这些值如下:C 从十六进制值合并位,c,bit-manipulation,C,Bit Manipulation,我有两个uint32\t变量。 这些值如下: uint32_t a = 0x00002000; uint32_t b = 0x00c00000; 我希望将这两个变量合并,以便它们给出结果00000200c 如果我只是执行a+b,它不会返回正确的结果。有人能帮忙吗 编辑-我需要将b的位号31-20放入a的位号11-0。可以通过执行(b&0xFFF00000)来隔离b的位31-20 a的位11-0可以通过执行(a&0x00000FFF)来隔离 然后需要将b变量向右移动20位,然后再将其与a组合。把
uint32_t a = 0x00002000;
uint32_t b = 0x00c00000;
我希望将这两个变量合并,以便它们给出结果00000200c
如果我只是执行a+b
,它不会返回正确的结果。有人能帮忙吗
编辑-我需要将b的位号31-20放入a的位号11-0。可以通过执行
(b&0xFFF00000)
来隔离b的位31-20
a
的位11-0可以通过执行(a&0x00000FFF)
来隔离
然后需要将b
变量向右移动20位,然后再将其与a
组合。把这一切放在一起,你就会明白
uint32_t answer = ((b & 0xFFF00000) >> 20) | (a & 0x00000FFF);
您需要阅读更多关于位运算符的内容,对于这种情况,您需要and运算符&
,移位运算符>
或该结果的逻辑是什么?这绝对不是串联。可能是a
与b
的零修剪版本的串联。我使用这些运算符得到了这些值。我根本无法理解这种转变。我试着换20档,但没用。你说的串联是什么意思00002000c
不是00002000
和00c00000
的串联。逻辑是我需要将b的位号31-20添加到a的位号12-0。