我需要使用c ++将变量中的每个位相互xor
让我们考虑4位值a和x,其位位表示为a = a3a2a1a0
和x = x3x2x1x0
。
我们定义了掩蔽操作"。"为a.x = a3x3(xor)a2x2(xor)a1x1(xor)a0x0
。
我做了一个& x并找到a3x3 a2x2 a1x1 a0x0
现在我需要xor但是怎么样?有什么特别的方法吗?喜欢'&'操作?我搜索过但没有找到任何东西......任何帮助都将受到赞赏!
答案 0 :(得分:1)
根据你的描述,你将得到的最终结果是0或1,因为你完成了anding,你需要的是计算anding结果的二进制表示中有多少1:a& X
你需要做的是逐位移位并计算1,如果最终结果为奇数,则最终结果为1,即使最终结果为0也是如此。
答案 1 :(得分:0)
你需要移动“a和x”来执行所有位的xor。
类似的东西:
uint32_t a = 0xa;
uint32_t x = 0xb;
uint32_t tmp = a & x; // Bitwise AND of a and x
uint32_t res = 0;
for (int i = 0; i < 32; ++i)
{
res = res ^ (0x1 & tmp); // Only include LSB of tmp in the XOR
tmp = tmp >> 1; // Shift tmp to get a new LSB
}
cout << "Result: " << res << endl;
另一种解决方案可能是:
uint32_t a = 0xa;
uint32_t x = 0xb;
uint32_t tmp = a & x; // Bitwise AND of a and x
uint32_t res = 0;
while (tmp > 0)
{
if ((tmp % 2) == 1) res = (res + 1) & 0x1; // XOR operation
tmp = tmp/2; // Shift operation
}
cout << "Result: " << res << endl;