繁体   English   中英

右移与按位AND

[英]Right shift with bitwise AND

最佳答案的解决方案是

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

bit = (number >> x) & 1;

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

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

unsigned number = 5; //0101
int x = 2; //

换班后(number >> x)我们得到0001 但是我们移位了第1位和第2位,所以当我们进行按位AND时 ,我们不是对第三位而不是第二位,而x = 2吗? 这不意味着如果我想检查是否设置了位x ,我不应该这样做:

 bit = (number >> (x - 1)) & 1);

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

你说:

换班后(number >> x)我们得到0001 但是我们移位了第1位和第2位,所以当我们进行按位AND时 ,我们不是对第三位而不是第二位,而x = 2吗? 这不意味着如果我想检查是否设置了位x ,我不应该这样做:

 bit = (number >> (x - 1)) & 1); 

要获得第1个最低有效位的值,需要(number >> 0) & 1
要获得第二个最低有效位的值,需要(number >> 1) & 1
要获得第3个最低有效位的值,需要(number >> 2) & 1

等等

换一种说法,

1st表示0位移位
第二个意味着1位移位
第3个意味着2位移位
Nth意味着N-1位移位

我希望这对你来说更清楚一些。

位数表示2的幂。 因此当x为2时,你所说的是bit 2 = 2 ** 2 = 4。

最低有效位(或“最右侧”位,如果您更喜欢位0,而不是位1。

此外,除非您的“位数”在变量中,否则没有理由实际进行位移。

例如,要测试值的第5位,只需执行

if (variable & 0x20)
    bit_is_set();

这里0x20只是2 ** 5,(或1 << 5)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM