‘罕见’运算符
按位或:|
转化为二进制之后,每一个位置相比较, 两个对位只要有一个为1,那么结果都为1,否则就为0
例如:
4|3
结果是7 ,4的二进制是100, 3的二进制是011, 100|011结果是111,即7|还可以取整
3.2|1.2
结果为 3 , 3的二进制是11,1的二进制是01, 11|01结果是11,即3
按位与:&
- 转化为二进制之后,每一个位置相比较, 两个对位同时为1才得1,只要一个为0就为0
- 例如:
4&3
结果是0 ,4的二进制是100, 3的二进制是011, 100|011结果是000,即0
按位异或:^
- ^运算符跟|类似,但有一点不同的是 如果两个操作位都为1的话,结果产生0
3^1
结果为2 , 3的二进制是11,1的二进制是01, 11^01结果是10,即2
按位非: ~
- 转化为二进制之后,每一个位置1变0,0变1
~6
结果是 -7, 6的二进制00000110,按位取反 11111001,符号位(即最高位)为1(表示负数),将除符号位之外的其他数字取反10000110,末位加1进行补码,10000111,转回十进制-7~-2
结果是1,-2的二进制是10000010,按位取反 01111101,符号位(即最高位)为1(表示负数),将除符号位之外的其他数字取反00000010,末位减1进行补码00000001,转回十进制1
右移>>
- 指定值的二进制所有位都右移规定的次数,对于其移动规则只需记住符号位不变,左边补上符号位即按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1
7>>1
的结果为3,7的二进制是00000111,右移一位00000011,转回十进制3>>>
无符号右移,忽略了符号位扩展,-1>>>31
结果是1,<<<
不存在
左移<<
- 指定值的二进制所有位都左移规定的次数,对于其移动规则只需记住丢弃最高位,0补最低位即按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零
1<<2
的结果为4,1的二进制是00000001,左移二位00000100,转回十进制4
应用
使用&运算符判断一个数的奇偶
偶数 & 1 = 0
奇数 & 1 = 1
使用~~,>>,<<,>>>,|来取整
~~2.64 = 2
2.64 >> 0 = 2
2.64 << 0 = 2
2.64 | 0 = 2
2.64 >>> 0 = 2(>>>不能对负数取整)
利用^来完成比较两个数是否相等
6 ^ 6 = 0
6 ^ 非6数 != 0