一般来说,位操作符只能操作整数类型(默认为int类型变量 32位)的变量或值
一、位逻辑运算符
运算符 | 含义 | 单目/双目运算符 | 实例 |
& | 与 | 双目运算符 | 4&5=4 |
| | 或 | 双目运算符 | 4|5=5 |
^ | 异或 | 双目运算符 | 4^5=1 |
~ | 非 | 单目运算符 | ~4=-5 |
1 class 位逻辑运算符 2 { 3 public static void main(String[] args) 4 { 5 System.out.println(5&4); 6 System.out.println(5|4); 7 System.out.println(5^4); 8 System.out.println(~4); 9 } 10 }
二、位移运算符
运算符 | 含义 |
<< | 将操作数的二进制码整体左移指定位数,左移后右边空出来的位以0填充 |
>> | 将操作数的二进制码整体右移指定位数,右移后右边空出来的位以符号位填充。即如果第一个操作数是正数,则左边补0;如果第一个操作数为负数,则左边补1 |
>>> | 无符号右移,他把第一个操作数二进制码右移指定位数,左边空出来的位总是以0补充 |
左移运算符
1 System.out.println(-8<<2);//输出为-32
-8的原码:1000_0000_0000_0000_0000_0000_0000_1000
-8的反码:1111_1111_1111_1111_1111_1111_1111_0111
-8的补码:1111_1111_1111_1111_1111_1111_1111_1000
左移两位:1111_1111_1111_1111_1111_1111_1110_0000
左移两位的反码:1111_1111_1111_1111_1111_1111_1101_1111
左移两位的原码:1000_0000_0000_0000_0000_0000_0010_0000 结果为-32
无符号右移运算符和有符号右移运算符
1 jshell> -5>>2 2 $1 ==> -2 3 4 jshell> -5>>>2 5 $2 ==> 1073741822 6 7 jshell>
-5的原码:1000_0000_0000_0000_0000_0000_0000_0101
-5的反码:1111_1111_1111_1111_1111_1111_1111_1010
-5的补码:1111_1111_1111_1111_1111_1111_1111_1011
-5>>2过程:
-5>>2: 1111_1111_1111_1111_1111_1111_1111_1110
-5>>2的反码:1111_1111_1111_1111_1111_1111_1111_1101
-5>>2的原码:1000_0000_0000_0000_0000_0000_0000_0010 结果位-2
-5>>>2过程:
-5>>>2:0011_1111_1111_1111_1111_1111_1111_1110
jshell> int a=0b0011_1111_1111_1111_1111_1111_1111_1110 a ==> 1073741822