所以这是我正在做的事情的分解,我正在使用的值是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
答案 0 :(得分:1)
十六进制0xE
具有位1110
;十六进制0xC
具有位1100
;因此0xC ^ 0xE
是0010
或0x2
。因此,当您对这两个十六进制数字进行异或运算时,最终结果为2
。
类似地,0xF
具有位1111
;十六进制0xD
具有位1101
;因此0xF ^ 0xD
是0010
或0x2
。
因此,您看到的结果正是您所期望的。