本文共 2107 字,大约阅读时间需要 7 分钟。
原本今天想和大家谈谈什么是正则表达式的,回来的路上忽然想起位运算,刚好这个知识我也很久没复习了,所以今天和大家一起来复习及学习
那么什么是位运算了?答:就是以二进制运算的一种运算符,下面是今天的内容。
1、&
2、|
3、^
4、>>
5、<<
6、~
可能大家会有疑问,&和| 不是 与 和 或 吗? 其实不然 单与 和 单或 是位运算,也可以跟 正常的&& || 一样用,但是会有一个判断性能上的问题.
这里的 & 和| 在判断的时候 会判断2个条件 而&& 和 || 却不会,这就是短路,如:
boolean a = false;
boolean b= true;
if(a && b){
System.out .println("逻辑运算符");
}
if(a & b){
System.out .println("位运算符");
}
在上面if 判断语句中随便结果是一样的,但是处理方式却不一样,
&& 的处理方式是先判断a是true 还是 false ,由于我给a是false 所以这个if判断就会结束,而不会再次判断b(&&的判断是2个条件都是true才成立)
& 的处理方式却和&&的处理方式截然不同,而是判断了a 发现是false,也不会结束而是继续判断b,从这点上我们就可以知道 &&的效率比&的效率高,
这个叫做“短路”。
| 和 ||也是同理, 我就不多做介绍了。
那么& 和 | 有什么用了?
其实& 和 | 有 && ,|| 做不了的事情,就是二进制的运算。
1、&:
int a = 5;
int b = 4;
System.out.println(a&b);
答案:5
为什么会出现这个答案了?
0000-0000-0000-0101//这是5的二进制因为是int类型所以是32位
0000-0000-0000-0100
&——————————————
0000-0000-0000-0100
所以答案是:4
这里的0和1分别表示 false ,true;
0 和 0 = 0
0 和 1 = 0
1 和 1 = 1
2、|:
int a = 5;
int b = 4;
System.out.println(a|b);
答案:5
为什么会出现这个答案了?
0000-0000-0000-0101
0000-0000-0000-0100
|——————————————
0000-0000-0000-0101
int a = 5;
int b = 4;
System.out.println(a^b);
答案:1
为什么会出现这个答案了?
0000-0000-0000-0101
0000-0000-0000-0100
^——————————————
0000-0000-0000-0001
0000-0000-0000-0110
1111-1111-1111-1001
int a = 5;
int b = 4;
System.out.println(a&b);
答案:5
为什么会出现这个答案了?
0000-0000-0000-0101
0000-0000-0000-0100
|——————————————
0000-0000-0000-0101
转载地址:http://ybpbn.baihongyu.com/