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 取消注释
会比/*.....*/好用
未完待续。。。。