如何将两个字节值合并为一个?

时间:2019-01-28 21:49:12

标签: c bit-manipulation bitwise-operators bit xor

所以这是我正在做的事情的分解,我正在使用的值是0x0123456789abcdef,具有选择索引,a = 0,b = 1; a = ef,b = cd。

首先,我分离了他们选择的索引,这很正常。

值A:0x00000000000000ef。

值B:0x00000000000000cd。

然后我将它们移到以前另一个索引的位置,在该位置也可以很好地工作。

值A:0x000000000000ef00。

值B:0x00000000000000cd。

然后,我使用|将A和B值组合在一起运算符,该运算符也可以很好地工作并将其存储到long int P

值P:0x000000000000efcd。

然后我决定最终将其与x值0x0123456789abcdef组合

我决定执行此操作的方法是首先使用vor运算符。

所以我做了p = x ^ p;

我做了数学

0x0123456789abcdef

0x000000000000efcd。


0x0123456789ab0000

它应该变成那个,但是由于某种原因导致它

0x0123456789ab2222,我不明白2222在那里出现的方式。有什么办法可以得到我想要的输出0x0123456789abefcd

1 个答案:

答案 0 :(得分:1)

十六进制0xE具有位1110;十六进制0xC具有位1100;因此0xC ^ 0xE00100x2。因此,当您对这两个十六进制数字进行异或运算时,最终结果为2

类似地,0xF具有位1111;十六进制0xD具有位1101;因此0xF ^ 0xD00100x2

因此,您看到的结果正是您所期望的。