右移与按位AND

8pr*_*ons 2 c bit

最佳答案的解决方案是

要检查一下,将数字x向右移动,然后按位和它:

bit = (number >> x) & 1;

这将把位x的值放入变量位.

在假设以下内容时,让我感到困惑的是:

unsigned number = 5; //0101
int x = 2; //
Run Code Online (Sandbox Code Playgroud)

转移后(number >> x)我们得到了0001.但是我们将位1和2移开了,所以当我们按位AND时,我们不是在第三位而不是第二位,而不是第二位,在哪里x = 2?这不意味着如果我想检查是否x设置了位,我不应该这样做:

 bit = (number >> (x - 1)) & 1);
Run Code Online (Sandbox Code Playgroud)

小智 5

是的,你正在对第三位进行按位AND.考虑x为零索引,即第一位是位0.