我讀了一本書,指出:位掩碼和選擇偶數位
要在32位無符號整型選擇所有的偶數位,我們可以和 與數位掩碼0xAAAAAAAAAA,這是一個32位數與 偶數位設置(0xA是十進制10,1010二進制)。對於選擇奇 位,我們可以和掩碼0x5555555555,這與將所有 偶數位數字(0x5的是十進制的5,0101二進制)
什麼我不明白是怎麼0x或1010套所有的偶數位都設置爲1.如果你從零開始從右向左清晰地顯示它是設置的奇數位。我錯過了什麼?
我讀了一本書,指出:位掩碼和選擇偶數位
要在32位無符號整型選擇所有的偶數位,我們可以和 與數位掩碼0xAAAAAAAAAA,這是一個32位數與 偶數位設置(0xA是十進制10,1010二進制)。對於選擇奇 位,我們可以和掩碼0x5555555555,這與將所有 偶數位數字(0x5的是十進制的5,0101二進制)
什麼我不明白是怎麼0x或1010套所有的偶數位都設置爲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
用作位掩碼時。只有偶數位纔會被設置。始終從最低位開始。
您需要將右邊位(LSB)的位置計爲第一位(奇數)和第二位(偶數)。
「_If you left from right to right_」有你的問題。數字從右側開始並增加到左側。我可以在左邊添加一個零,它可以是完全相同的數字。 –
哎呀,這是一個錯字。我的意思是左轉。例如,1010中最右邊的位(索引-0)爲0(偶數),索引-1位(奇數)爲1,索引-2位(偶數)爲0.例如,索引-2位是偶數,它應該設置爲1,但它是零。我正是這個意思。 – Tony54
這取決於你的觀點,是第一位(LSB)號碼0還是號碼1?傳統上它是0,並且它與C中基於零的所有其他元素非常匹配,但它違背了所有傳統編號。 –