如果两者都为0,则按位运算得到1

时间:2012-01-10 16:05:12

标签: bit-manipulation

我需要执行按位操作(或系列),以便:

0 1 = 0
1 1 = 1
1 0 = 0

到目前为止AND(&)工作正常,但我也需要

0 0 = 1

这里AND(&)不正确。

我在jquery grep函数中使用它,其中包含:

jQuery.grep(json, function (e, index) {
            return (e.value & (onoff << 3)) != 0;
        });

其中onoff可以是1或0而e.value是4比特字符串的表示(即可以是“1001”)。在上面的例子中,我正在测试左边的第一位(&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; 3

这可以用AND,OR,XOR系列来完成吗?

2 个答案:

答案 0 :(得分:7)

这只是XNOR(a, b),等于NOT(XOR(a, b)),即与输出反转的异或。在C和C类语言中,这将是:

!(a ^ b)

或在您的具体案例中:

return !((e.value >> 3) ^ onoff);

话虽如此,你可以测试平等:

return (e.value >> 3) == onoff;

答案 1 :(得分:0)

这看起来大致像XOR,其结果如下:

0 0 = 0
0 1 = 1
1 0 = 1
1 1 = 0

现在你想要反过来,这意味着如果两个输入都是相同的值你想要1。这导致我们NOT XOR

0 0 = 1
0 1 = 0
1 0 = 0
1 1 = 1