位运算符
3<<2=12;
3的二进制
0000-0000-0000-0000-0000-0000-0000-0011
左移2位 后面补零
0000-0000-0000-0000-0000-0000-0000-1100
6>>2 = 1
6的二进制
0000-0000-0000-0000-0000-0000-0000-0110
右移2位 前面补零
0000-0000-0000-0000-0000-0000-0000-0001
-6>>2=-2
-6的二进制
1111-1111-1111-1111-1111-1111-1111-1010
右移2位 前面补1
1111-1111-1111-1111-1111-1111-1111-1110
左移(<<):其实就是乘以2的移动的位数次幂
3<<1 --> 3*2=6
3<<2 --> 3*4=12
3<<3 --> 3*8=24
3<<4 --> 3*16=48
右移(>>):就是除以2的移动的位数次幂
6>>2 --> 6/4=1
6>>1 --> 6/2=3
>>:最高位补什么由原有数据的最高位值而定
如果最高位0,右移后,用0补空位
如果最高位1,右移后,用1补空位
>>>:无论最高位是什么,右移后,都用0补
6 & 3 = 2
110
&011
------
010 = 2
6 | 5 = 7;
110
|101
-------
111 = 7;
6 ^ 5 = 3;
110
^101
-------
011 = 3;