Guy*_*ham 5 c algorithm bit-manipulation xor bitwise-xor
上面提到的问题如下:给定两个整数x1和x2,找到另一个整数x3,它不同于x1和x2,而不使用if关键字.
我的解决方案基于对整数的逐位运算以及两个位之间的XOR将返回1的事实,当且仅当两个位不相等时.
这个解决方案有效吗?你能找到更好的解决方案吗?当然,运行时考虑和内存消耗应该尽可能好.
注意:三元运算和比较(即 - !=,==)也是不允许的
提前致谢,
盖伊.
我的解决方案
int foo(int x1,int x2)
{
// xor
int x3 = x1 ^ x2;
// another xor
x3 = x3 ^ x2;
// not
x3 = ~x3;
return x3;
}
Run Code Online (Sandbox Code Playgroud)
将我的评论转换为答案:
\n\n你所拥有的是~(x ^ y ^ y),这只是~x,所以如果 的话它\xe2\x80\x99t 不起作用y = ~x。一种选择是创建一个数字,\xe2\x80\x99s 与 x1 的双位不同,并且与 x2 的个位不同:
return ~(x1 & 2 | x2 & 1);\nRun Code Online (Sandbox Code Playgroud)\n\n(简化(~x1 & 2) | (~x2 & 1)来自@chux。谢谢!)