我想将第二位设置为零,例如:十进制为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;
}
最佳答案
一个是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