是否有一些位操作或一系列位操作会给我以下结果?
我将通过示例展示我想要的东西。请注意,每个位串的长度无关紧要:
1)
100000
100000
------
011111
2)
000000
000000
------
000000
3)
100000
000000
------
000000
4)
000100
000100
------
111011
5)
100100
100100
------
011011
6)
100100
000100
------
111011
7)
010101
101010
------
000000
8)
111111
111111
------
000000
所以,我的想法是,如果第一个字符串中的任何地方,1与第二个字符串中的1重叠,那么在结果中,1s出现在除1s重叠的位置之外的任何地方。
答案 0 :(得分:2)
你可以使用按位nand,即bitwise AND否定得到除了案例2,3和7以外的所有内容。
如果您绝对必须有这两种情况,那么
result = a & b; // Bitwise and of the two inputs
if (result != 0) { // If we have no matches, we want it to stay 0.
result = ~result;
}
但是,如果你这样做,你必须意识到你无法从案例8中讲述案例2/3/7。
答案 1 :(得分:2)
伪代码:
if (a & b)
return ~(a & b)
else
return 0
答案 2 :(得分:0)
答案 3 :(得分:-2)
您是否需要对整个位列表进行单个操作,或者您可以逐个迭代单个位对?如果是这样,它是微不足道的,如果没有,我相信有一个布尔二元函数可以完全做到(在16个中)