位操作问题

时间:2010-11-05 15:34:17

标签: binary bit-manipulation bitwise-operators

是否有一些位操作或一系列位操作会给我以下结果?

我将通过示例展示我想要的东西。请注意,每个位串的长度无关紧要:

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重叠的位置之外的任何地方。

4 个答案:

答案 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)

IIRC,一种可靠的方式进行这种转换,即从你拥有的操作结果数据到数字逻辑被称为“卡诺图”,即你从数据开始,称为“真值表”,最后得到必要的数字逻辑。当然,从中可以转换为任何编程语言,给定特定于语言的逐位运算符/约定。

答案 3 :(得分:-2)

您是否需要对整个位列表进行单个操作,或者您可以逐个迭代单个位对?如果是这样,它是微不足道的,如果没有,我相信有一个布尔二元函数可以完全做到(在16个中)