位运算符
左移和右移
左移
- 左移越移越大。
- 往左移几位就相当于这个数乘于2的几次方
- 3 << 2 ——> 3 * 2^2 = 3 * 4 = 12
- 3 << 3 ——> 3 * 2^3 = 3 * 8 = 24
右移
-
右移越移越小
-
往右移几位就相当于这个数除于2的几次方
- 6 >> 1 ——> 6 / 2^1 = 6 / 2 = 3
-
> > 右移最高位是由最高位值而定,最高为是0就补0,是1就补1
-
比如 -6 的二进制是
1111—1111 1111—1111 1111—1111 1111—1001 = -6
-
则 往右移2结果是
>> 1111—1111 1111—1111 1111—1111 1111—1110
-
-
> > > 无论最高位是什么,右移后都补0
- >>> 0011—1111 1111—1111 1111—1111 1111—1110
与 &— 或| — 异或
& : |
---|
6 & 3 = 2; |
110 |
& 011 同真(1)异假(0) |
010 = 2; |
| : |
6 | 5 = 7; |
110 |
| 101 同真或真假为真(1) 同假为假(0) |
代码示范
class Test{
public static void main(String[] args){
System.out.println("6与5的值是:" + 6 & 3);
System.out.println(("6或5的值是:")6 | 5);
System.out.println(("6异或5的值是:")6 ^ 5);
}
}
/*
输出打印结果:
6与5的值是:2
6或5的值是:7
6异或5的值是:3
*/
位运算符细节
细节 |
---|
<< 空位补0,被移除的高位丢弃,空缺位补0 |
>> 被移位的二进制最高位是0,右移后,空位补0 , 最高位是1,空位补1 |
>>> 被移位的二进制最高位是0或者1,最高位都补0 |
& 二进制位进行&运算,只有1&1时结果是1,否则是0; |
| 二进制位进行 | 运算,只有0 | 0时结果是0,否则1; |