总结一下java中的位操作
java中有很多位操作,如移位,异或,与或非等。
移位
- 向左移,二进制的结尾就直接用0来补全了
//左移两位 m = -81; m = m << 2; System.out.println("m:(0b)"+Integer.toBinaryString(m)+"左移两位<<");
- 向右移,有两种情况
- 开头以符号位补全(负数就是用1补全)
//右移两位,前面用符号位补位 m = -81; m = m >> 2; System.out.println("m:(0b)"+Integer.toBinaryString(m)+"右移两位>>");
- 开头以0补全
//右移两位,前面用0补位 m = -81; m = m >>> 2; System.out.println("m:(0b)"+Integer.toBinaryString(m)+"右移两位>>>");
- 与
//按位与操作
m = -81;
n = 1;
temp = m & n;
System.out.println("temp:(0b)"+Integer.toBinaryString(temp)+"与&");
- 或
//按位或操作
m = -81;
n = 1;
temp = m | n;
System.out.println("temp:(0b)"+Integer.toBinaryString(temp)+"或|");
- 非
//按位非
m = -81;
n = 1;
temp = ~n;
System.out.println("temp:(0b)"+Integer.toBinaryString(temp)+"非~");
- 异或
//异或操作
m = -81;
n = 1;
temp = m ^ n;
System.out.println("temp:(0b)"+Integer.toBinaryString(temp)+"异或^");
- 同或
就是异或的取反。
整体代码
public static void main(String[] args){
int m = -81;
int n = 1;
int temp;
System.out.println("m:(0b)"+Integer.toBinaryString(m));
System.out.println("n:(0b)"+Integer.toBinaryString(n));
//左移两位
m = -81;
m = m << 2;
System.out.println("m:(0b)"+Integer.toBinaryString(m)+"左移两位<<");
//右移两位,前面用符号位补位
m = -81;
m = m >> 2;
System.out.println("m:(0b)"+Integer.toBinaryString(m)+"右移两位>>");
//右移两位,前面用0补位
m = -81;
m = m >>> 2;
System.out.println("m:(0b)"+Integer.toBinaryString(m)+"右移两位>>>");
//异或操作
m = -81;
n = 1;
temp = m ^ n;
System.out.println("temp:(0b)"+Integer.toBinaryString(temp)+"异或^");
//按位与操作
m = -81;
n = 1;
temp = m & n;
System.out.println("temp:(0b)"+Integer.toBinaryString(temp)+"与&");
//按位或操作
m = -81;
n = 1;
temp = m | n;
System.out.println("temp:(0b)"+Integer.toBinaryString(temp)+"或|");
//按位非
m = -81;
n = 1;
temp = ~n;
System.out.println("temp:(0b)"+Integer.toBinaryString(temp)+"非~");
}
附表:运算符优先级
优先级 | 运算符 | 结合性 |
---|---|---|
1 | (),[],. | 从左到右 |
2 | !,+(正号),-(负号),~,++,– | 从右到左 |
3 | +,/,% | 从左到右 |
4 | +(加号),-(减号) | 从左到右 |
5 | <<,>>,>>> | 从左到右 |
6 | <,<=,>,>=,instanceof | 从左到右 |
7 | ==,!= | 从左到右 |
8 | &(按位与) | 从左到右 |
9 | ^(按位异或) | 从左到右 |
10 | |(按位或) | 从左到右 |
11 | || | 从左到右 |
12 | && | 从左到右 |
13 | ?: | 从右到左 |
14 | =,+=,-=,*=,/=,%=,&=,|=,^=,~=,<<=,>>=,>>>= | 从右到左 |