我想说的是自学.
我们有两个整数.我想得到第三个元素,它等于两个整数之间的XOR,但是有约束.好的,让我举一个例子来说明一点.
int x is, let's say, is 10 `x = 10 //Binary 1010` and `int y = 9 //Binary 1001`
int t = x^y, where ^ is an operator that is defined as described below.
Run Code Online (Sandbox Code Playgroud)
但第一比特在x应的第二位进行异或运算y,并被存储为第一比特t和第二比特x进行异或运算与y中的第一位,并存储在吨等所述第二位.
结果应该是:
t = x^y = 1100
Run Code Online (Sandbox Code Playgroud)
我希望你能理解这个问题.如果没有,我会尽力澄清.
但是x中的第一位应该是x的第二位x并且存储为第一位int t和第二位int x存储到y中的第一位并且存储在t中的第二位,依此类推
...所以这不是一个关于xor的问题,这是一个关于如何交换每对比特的问题y.
您可以使用以下内容执行此操作:
(y & 0xaaaaaaaa) >> 1选择每对位中最重要(最左边)的位,并将它们向右移动一位.(0xaaaaaaaa是101010....101010二进制的.)(y & 0x55555555) << 1选择每对中最不重要(最右边)的位,并将它们全部向左移动一位.(0x55555555是010101....010101二进制的.)y_pairwise_bit_swapped = ((y & 0xaaaaaaaa) >> 1) | ((y & 0x55555555) << 1)将执行交换.然后t = x ^ y_pairwise_bit_swapped.
(显然,根据所需的最大位宽调整常数.)