簡體   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