1、^(异或运算符)
运算规则:相同则为0,相异则为1
如:1010 ^ 1011 = 0001
2、&(与运算符)
运算规则:相同则为1,相异则为0
如:1010 & 1011 = 1010
另外&还能用于取余:x & (y-1)
3、| (或运算符)
运算规则:有一个为1,则为1,否则为0
如:1010 | 1011 = 1011
以下三种运算符都是位运算符
>>x(常数): 向右移动x位(顶点在哪个方向就往哪个方向移动),如果该数是正数,则高位(最左边)补x个0,如果是负数,则最高位补x个1。
<<x(常数): 向左移动x位(顶点在哪个方向就往哪个方向移动),无论正负数低位
(最右边)都补x个0。
<<<: 无该表示方式。
>>>x(常数): 表示无符号右移x位
,所谓无符号是与>>x对比,该操作在移动后,无论正负数高位
(最左边)都补0。
4. <<(左移运算符)
举例1:-20<<2
原码:10000000 00000000 00000000 00010100
反码: 11111111 11111111 11111111 11101011(符号位不变,其他位取反)
补码: 11111111 11111111 11111111 11101100(反码 + 1)
左移两位(最右边两位添0)
补码: 11111111 11111111 11111111 10110000
反码: 11111111 11111111 11111111 10101111(补码 - 1)
原码: 10000000 00000000 00000000 01010000(符号位不变,其他位取反)
结果:-80
举例2:20<<2
原码(反码,补码):00000000 00000000 00000000 00010100
左移两位(最右边两位添0)
原码(反码,补码):00000000 00000000 00000000 01010000
结果:80
5. >>(右移运算符)
举例1:-20>>2
原码:10000000 00000000 00000000 00010100
反码: 11111111 11111111 11111111 11101011(符号位不变,其他位取反)
补码: 11111111 11111111 11111111 11101100(反码 + 1)
右移两位(最左边两位添1)
补码: 11111111 11111111 11111111 11111011
反码: 11111111 11111111 11111111 11111010(补码 - 1)
原码: 10000000 00000000 00000000 00000101(符号位不变,其他位取反)
结果:-5
举例2:20>>2
原码(反码,补码):00000000 00000000 00000000 00010100
右移两位(最左边两位添0)
原码(反码,补码):00000000 00000000 00000000 00000101
结果:5
6. >>>(无符号右移运算符)
举例1:-2>>>1
原码:10000000 00000000 00000000 00000010
反码: 11111111 11111111 11111111 11111101(符号位不变,其他位取反)
补码: 11111111 11111111 11111111 11111110(反码 + 1)
右移1位(无符号位运算符,最左边一位只添0)
补码: 01111111 11111111 11111111 11111111
反码: 01111111 11111111 11111111 11111111(高位为0,正数)
原码: 01111111 11111111 11111111 11111111(与反码相同)
结果:2147483647
举例2:2>>>1
原码(反码,补码):00000000 00000000 00000000 00000010
右移一位(最左边一位添0)
原码(反码,补码):00000000 00000000 00000000 00000001
结果:1
7、&& (逻辑与运算符)
运算规则:符号两边全为真是则为真,否则为假。
&也可以做为逻辑与运算符,区别在于&会判断两边,而&&如果左边为假,右边就不执行了。因此&&也称为短路与
8、|| (逻辑或运算符)
运算规则:符号两边有一个为真则为真,否则为假
| 也可以做为逻辑与运算符,区别在于 | 会判断两边,而 || 如果左边为假,右边就不执行了。因此 || 也称为短路或。