[英]Bit manipulation (clear n bits)
在位操作一章中,閱讀了蓋爾·拉克曼·麥克道爾(Gayle Laakmann McDowell)撰寫的《破解編碼訪談》一書,它提出了一個問題:
查找的值(假設數字用4位表示):
1011 & (~0 << 2)
現在,〜0 = 1並將其向左移動兩次將產生100(= 0100完成4位)。 安定1011和0100等於0000。
但是,我的答案是1000。
~0
不是1而是1111
(或0xf
)。 ~
運算符是按位 NOT運算符,而不是邏輯 運算符(即!
)。
因此,當向左移動2位時,最后四個位是1100
。 而1100 & 1011
等於1000
。
~0
不等於1。 0
將默認為是整數,並且NOT操作將反轉所有比特,不只是第一個。
~
是按位補碼運算符。
的值~0
應該是1111
在4位。
1011 & (~0 << 2)
= 1011 & ( 1111 << 2)
= 1011 & 1100
= 1000
1011 & (~0 << 2)
~0
不是1,而是1111
2或0xF
16。 1111
向左移動兩次會得到1100
(最左邊的兩個位已被刪除並從右邊開始用0填充)。 1011 & 1100
將在每個位位置中將對應的位位置為1的結果為1,否則為0。結果為1000
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.