簡體   English   中英

位操作(清除n位)

[英]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)
  1. ~0不是1,而是1111 20xF 16。
  2. 1111向左移動兩次會得到1100 (最左邊的兩個位已被刪除並從右邊開始用0填充)。
  3. 1011 & 1100將在每個位位置中將對應的位位置為1的結果為1,否則為0。結果為1000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM