逻辑按位运算符

时间:2017-01-21 14:09:22

标签: c++

我想将第二位设置为零,例如:十进制18(binaray中的10010),所以 我在下面写了这段代码。在第一个实例中,它为第二个实例打印0,它打印16,这是正确的。为什么发生在我身上的代码中的逻辑是相同的,但它打印出不同的结果。有人可以清楚这一点。

 int main()
    { 
        int a = 18;
        a = a&(0 << 1); // first instance
        cout << a << endl; // a = 0
        a = 18;
        a = a&(~(1 << 1)); // second
        cout << a << endl; // a = 16
        return 0;
    }

2 个答案:

答案 0 :(得分:5)

a是18

a = 10010

第一

a & (0 << 1)
10010 & (00000 << 1) // move 0 one bit left
10010 & 00000 = 00000  = 0

第二

a & (~(1 << 1))
10010 & ( ~(00001 <<  1))  // move 1 one bit left
10010 & ( ~(00010)) // reverse 2
10010 & 11101
10010 & 11101 = 10000 = 16

答案 1 :(得分:1)

逻辑不一样。

(0 << 1)表示向左移0一位,这会导致0。按位和0总是返回零。

(1 << 1)表示向左移1一位,这会导致2