位运算符
位运算符的本质是先把操作数转为二进制,然后运算,结果转为十进制。
- &:转为二进制后,同一位置的两个 数,一个为0就是0,两个都为1才是1
- |:转为二进制后,同一位置的两个数,一个为1就是1,两个都为0才是0
- ^:转为二进制后,同一位置的两个数,相同为0,不同为1
public class Test01 {
public static void main(String[] args) {
int a = 10;
int b = 12;
System.out.println(a&b);//结果为8
System.out.println(a|b);//结果为14
System.out.println(a^b);//结果为6
}
}
以上三个运算符,当两边的操作数为boolean类型时,当做逻辑运算符使用。当两边的操作数为数字时,当做位运算符使用。
注:一个数据如果对另一个数据异或两次,结果是数据本身。
除了这几种,常见的位运算符还有左移和右移两个运算符,公式为操作数1>>操作数2或操作数1<<操作数2:
- “>>”:右移运算符,操作数1转为二进制,然后将其向右移动操作数2大小的位数,移除的数据舍弃,保留的数据转为十进制
- “<<”:左移运算符,操作数1转为二进制,然后将其向左移动操作数2大小的位数,空置的位置补上0,然后将数据转为十进制
public class Test02 {
public static void main(String[] args) {
int a = 10;
int b = a>>2;
int c = a<<2;
System.out.println(b);//结果为2
System.out.println(c);//结果为40
}
}
规律:如果语法为a>>b或a<<b,
a
>
>
b
相
当
于
a
/
2
b
,
a
<
<
b
相
当
于
a
∗
2
b
a>>b 相当于 a/2^b, a<<b 相当于 a*2^b
a>>b相当于a/2b,a<<b相当于a∗2b
位运算符的执行效率比普通乘除高,因此在源码中会经常见到。