C++基礎知識補充

1.位知識

<<:左移,將所有二進制狀態的數左移,eg:5<<1  ,00000110往左移動了一位變成00001100,可以達到整個數放大兩倍的作用,相當於乘2;

>>:右移,將所有二進制狀態的數右移,eg:>>1  ,往右移動了一位,可以達到整個數放大兩倍的作用,相當於乘2;

~:取反,將二進制狀態中的0變成1,1變成0,eg:~5,00000110變成11111001

|:或,兩個數的運算,同位有1便爲1,都爲0則爲0,eg:5|4,(00000110)|(00000100) 後爲00000110,結果爲5;

&:且,同位都爲1才爲1,有0則爲0,eg:5&4,(00000110)|(00000100) 後爲00000100,結果爲4;

^:異或,同位相同爲0,不同爲1,eg:5^4,(00000110)^(00000100) 後爲00000010果爲2;異或的性質:任何數與0異或爲任何數,任何數與1異或則取反。

應用:1.快速乘除2的冪次,左移1位乘2,右移1位除2.

            2.實現某位的翻轉,只需要與某位上爲1其他位爲0的數進行異或,eg:00000110)^(00000100) 得到00000010實現了將第3位數翻轉。

            3.將數a,b交換。 a=a^b, b=b^a(此時已經實現b變成a),a^b(將a變成b)。

            4.指定某個位置的數爲1: R| = (1<<n),指定R上的第n位的數爲1;

               指定某個位置的數爲0:R&=~(1<<n),指定R上的第n位數爲0

 

2.註釋

#if  0......#endif    對中間的某段代碼進行註釋

#if  1......#endif    取消註釋

會比/*.....*/好用 

 

 

未完待續。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章