在计算机里面,所有的数都是按照二进制存储,二进制中只有0和1,而位运算就是直接对二进制进行操作
先看一下位运算的01表格,在二进制中,就是按照这个表格中的结果进行计算
a | b | a&b(与) | a|b(或) | a^b(异或) | ~a(非) |
1 | 1 | 1 | 1 | 0 | 0 |
0 | 1 | 0 | 1 | 1 | 1 |
0 | 0 | 0 | 0 | 1 | 1 |
我们有了上面的得数就可以很方便的进行计算
&运算
public class &运算{
public static void main(String[] args){
/*
位运算是把运算二进制中对应的每一位!
8——>1000 7->111 7——>111 6——>110
1 0 0 0 1 1 1
&
1 1 1 1 1 0
得数 0 0 0 (十进制0) 1 1 0(十进制6)
*/
System.out.println(Integer.toString(8,2));//1000
System.out.println(Integer.toString(7,2));// 111
System.out.println(8 & 7);//000(得数输出的是十进制0)
System.out.println(Integer.toString(7,2));//111
System.out.println(Integer.toString(6,2));//110
System.out.println(7 & 6);//110(6)
}
}
| 运算
public class &运算{
public static void main(String[] args){
/*
位运算是把运算二进制中对应的每一位!
8——>1000 7->0111 7——>0111 6——>0110
1 0 0 0 1 1 1
|
1 1 1 1 1 0
得数 1 1 1 1 (十进制15) 1 1 1(十进制7)
*/
System.out.println(Integer.toString(8,2));//1000
System.out.println(Integer.toString(7,2));// 111
System.out.println(8 & 7);//1111(得数输出的是十进制15)
System.out.println(Integer.toString(7,2));//111
System.out.println(Integer.toString(6,2));//110
System.out.println(7 & 6);// 111(7)
}
}
^ 异或
public class &运算{
public static void main(String[] args){
/*
位运算是把运算二进制中对应的每一位!
8——>1000 7->0111 7——>0111 6——>0110
1 0 0 0 1 1 1
^
1 1 1 1 1 0
得数 1 1 1 1 (十进制15) 0 0 1(十进制1)
*/
System.out.println(Integer.toString(8,2));//1000
System.out.println(Integer.toString(7,2));// 111
System.out.println(8 & 7);//1111(得数输出的是十进制15)
System.out.println(Integer.toString(7,2));//111
System.out.println(Integer.toString(6,2));//110
System.out.println(7 & 6);//001(1)
}
}