2015-09-16 102 views
2

我讀了一本書,指出:位掩碼和選擇偶數位

要在32位無符號整型選擇所有的偶數位,我們可以和 與數位掩碼0xAAAAAAAAAA,這是一個32位數與 偶數位設置(0xA是十進制10,1010二進制)。對於選擇奇 位,我們可以和掩碼0x5555555555,這與將所有 偶數位數字(0x5的是十進制的5,0101二進制)

什麼我不明白是怎麼0x或1010套所有的偶數位都設置爲1.如果你從零開始從右向左清晰地顯示它是設置的奇數位。我錯過了什麼?

+1

「_If you left from right to right_」有你的問題。數字從右側開始並增加到左側。我可以在左邊添加一個零,它可以是完全相同的數字。 –

+0

哎呀,這是一個錯字。我的意思是左轉。例如,1010中最右邊的位(索引-0)爲0(偶數),索引-1位(奇數)爲1,索引-2位(偶數)爲0.例如,索引-2位是偶數,它應該設置爲1,但它是零。我正是這個意思。 – Tony54

+0

這取決於你的觀點,是第一位(LSB)號碼0還是號碼1?傳統上它是0,並且它與C中基於零的所有其他元素非常匹配,但它違背了所有傳統編號。 –

回答

1

從左到右的東西就是你犯錯的地方。

見,當你真正做到這一點會發生什麼:

在二進制32位:

your number: 1111 1111 1111 1111 1111 1111 1111 1111 

Mask:  1010 1010 1010 1010 1010 1010 1010 1010 

result:  1010 1010 1010 1010 1010 1010 1010 1010 

第一位(右!!!)是奇數,並且將不會被置當使用AND運算符將0xAAAAAAAAAA用作位掩碼時。只有偶數位纔會被設置。始終從最低位開始。

+0

是的,我是從LSB開始的,只是我的OP(固定)輸入錯誤。我不確定「不均勻」和「過濾」是什麼意思。從右側的索引2設置爲0,當它應該是1. – Tony54

+0

固定溫度計,不知道你說的索引是錯誤的意思,它很好。 – koldewb

0

您需要將右邊位(LSB)的位置計爲第一位(奇數)和第二位(偶數)。