[英]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.