C++ 逻辑位运算符

C++ 逻辑位运算符,c++,C++,我想将第二位设置为零,以十进制表示ex:18(二进制为10010),因此 我在下面写了这段代码。在第一个实例中,它打印0;在第二个实例中,它打印16,这是正确的。为什么会发生在我身上?代码中的逻辑是相同的,但打印出不同的结果。有人能帮我澄清一下吗 int main() { int a = 18; a = a&(0 << 1); // first instance cout << a << en

我想将第二位设置为零,以十进制表示ex:18(二进制为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;
    }
intmain()
{ 
INTA=18;

a=a&(0逻辑不同

(0a为18

a = 10010
首先


a&(0)“逻辑是一样的”吗?解释一下你的想法。至少我认为它是这样的10010,结果应该是10000@latedeveloper。我的意思是“为什么你认为(0)不是按位的~我认为。这是^xor@latedeveloper所以,它们不同!必须检查一下,谢谢你。@PeteBecker
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