"&" 按位与
0000 1011
0010 0110 &
------------------
0000 0010
结论:如果对应位有0,则这一位结果就为0
"|" 按位或
0000 1011
0010 0110 |
------------------
0010 1111
结论:如果对应位有1,则这一位结果就为1
"^" 按位异或
0000 1011
0010 0110 ^
------------------
0010 1101
结论:一样的位置上为0,不一样的位置为1
0000 0000 0101 1011
0101 1011 ^ 0101 1011 ^
------------------ ------------------
0101 1011 0000 0000
0^n = n n^n = 0
"~" 按位非(取反)
0100 1011 ~
1011 0100
"<<" 左移
0000 1011 << 1 : 0001 0110 = 22 : 11*2^1
0000 1011 << 2 : 0010 1100 = 44 : 11*2^2
左移相当于乘法(右边补0)
">>" 右移
0000 1011 >> 1 : 0000 0101 = 5 : 11/2^1
0000 1011 >> 2 : 0000 0010 = 2 : 11/2^2
右移相当于除法(正数最高位补0)
-1 : 1111 1111 >> 1 : 1111 1111 : -1 (负数最高位补1)-1右移一位还为-1
">>>" 无符号右移
1111 1111 >>> 1 : 0111 1111
最高位补0