1.&(与)——两数二进制相交的位数
A.例子
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
B.用途
a.清零(让一个数迅速变为0)
例子:
1110 & 0 // 0
b.取一个数的指定位
例子:
1110 & 1111 //1110
c.判断奇偶
例子:
奇数 & 1 // 1
偶数 & 1 // 0
2.|(或)——两数二进制相并的位数
A.例子
0|0=0 0|1=1 1|0=1 1|1=1
B.用途
a.数据的一些位置设置为1
例子:
1110|1111 // 1111
3.^(异或)——相同为0,不同为1
A.例子
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
B.用途
4.#(猜想:不存在的符号)——相同为1,不同为0
A.例子
0 # 0 = 1
0 # 1 = 0
1 # 0 = 0
1 # 1 = 1
B.用途
5.~(取反)——1反为0,0反为1
对补码进行了取反(包括符号位)
A.例子
~1=0
~0=1
B.用途:
6.<<(有符号左移)
正数:相应的补码左移,从右往左补零
负数:原码转反码,反码转补码,除符号位,左移,然后从右往左补1,补码转反码,反码再转成原码
A.例子
5 << 1 // 10
解释:
5 10
00000101 => 00001010
B.用途
7.>>(有符号右移)
正数:相应的补码右移,从左往右补零
负数:原码转反码,反码转补码,除符号位,右移,然后从左往右补1,补码转反码,反码再转成原码
A.例子
5 >> 1 // 2
解释:
5 2
00000101 => 00000010
B.用途
8.<<<(无符号左移)
正数:原码转补码,直接进行左移,从右到左补零
负数:原码转补码,直接进行左移,从右往左补零,不转原码,直接输出
9.>>>(无符号右移)
正数:原码转补码,直接进行右移,从左到右补零
负数:原码转补码,直接进行右移,从左往右补零,不转原码,直接输出
10.复合运算符(组合表示)
&= 例:a&=b 相当于 a=a&b
|= 例:a|=b 相当于 a=a|b
>>= 例:a>>=b 相当于 a=a>>b
<<= 例:a<<=b 相当于 a=a<<b
^= 例:a^=b 相当于 a=a^b
11.实用技巧(随笔)
以x为例:
A.取相反数 // ~x + 1
B.判奇偶 // {奇数 & 1 // 1} {偶数 & 1 // 0}
C.最低位为1的二进制(从右到左) // a&(-a)
例子: 60 二进制为 111100
-60 二进制为 -111100
60 & (-60)为 4(0100)