Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从十六进制值合并位_C_Bit Manipulation - Fatal编程技术网

C 从十六进制值合并位

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变量。 这些值如下:

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。