二進位制在C語言還有這樣的操作?二進位制不一樣的炫酷,C語言小技巧
如果數字n是二進位制表示01相間的數字,那麼a=n+(n>>1)是一個全1的數字,b=a&(a+1)是二進位制表示全0的數字。
判斷一個數字n是否是2的次冪的最快的方式:如果數字n是2的次冪,那麼它的二進位制表示只有一位是1,其餘位都是0,那麼n&(n-1)=0。
求一個數的二進位制表達中1的個數,有個技巧。(當然,python的話可以直接count('1'))
假如x是一個二進數,例如x=0xfffa(1111 1111 1111 1010),要實現去掉最低位一個1,可進行的操作是x&=(x-1),此時x==0xfff8(1111 1111 1111 1000)。基於該思想,利用while迴圈對(x)判斷,可實現計算二進位制數中所有位上1的個數。

更多精彩C/C++學習樂園:648778840
求一個數的二進位制表達中0的個數
假如x是一個二進數,例如x=0xfffa(1111 1111 1111 1010),要實現去掉最低位一個0,可進行的操作是x|=(x+1),此時x==0xfffb(1111 1111 1111 1011) ;再去掉一個0,同樣,x|=(x+1),則x==0xffff。如果x的2位元組表示,則(x+1)為0。基於該思想,利用wile迴圈對(x+1)判斷,可實現計算二進位制數中所有位上0的個數。注意,x=1時,1的高位預設有0的(注意是所有位而不是寫出來的位上,因為二進位制高位的0是預設不寫出來的,但是不寫出來不代表沒有啊)。

更多精彩C/C++學習樂園:648778840
異或的特徵,相同的數字異或為0,0異或任何數字都是任何數字。可以利用異或來找到陣列中只出現過一次的元素。

更多精彩C/C++學習樂園:648778840
不使用其他空間,交換兩個值,32就是97和65的異或值(大小寫字母ASCII碼之間的異或值)
使用ASCII碼和異或的性質,實現大小寫的相互轉換:s[index]^=(1<<5)
C++中,A–65,a–97,異或表示不考慮進位的加法65^32=97,97^32=65(轉換大小寫用這種寫法,簡直震驚了)