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 取消註釋
會比/*.....*/好用
未完待續。。。。