你所不知道的“位运算及运算过程”

原本今天想和大家谈谈什么是正则表达式的,回来的路上忽然想起位运算,刚好这个知识我也很久没复习了,所以今天和大家一起来复习及学习

那么什么是位运算了?答:就是以二进制运算的一种运算符,下面是今天的内容。


  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

原理不变,因为是|所以:
0和0 =0
1和0 =1
1和1 = 1


3、^
这个符号叫做异或,如字面意思和或相反,


int a = 5;

int b = 4;

System.out.println(a^b);

答案:1

为什么会出现这个答案了?

0000-0000-0000-0101

0000-0000-0000-0100

^——————————————

0000-0000-0000-0001

该运算符的运算规律是:
0 和 0 = 0
0 和 1 = 1
1 和 1 = 0
该运算符有个特点,有个特点就是一个数异或一个数得出的数,再异或上一个被异或的数,会得出异或的数。
如:
int a = 5;
int b = 4;
int c = a^b;
System.out.println(c^a);
答案是:4
由于时间,我就不写运算过程了,大家可以自己在验证下,用二进制的形式,增强记忆~

4、<<

这个符号叫做左移
int a = 6;
System.out.println(a<<2);

0000 0000 0000 0101
0000 0000 0000 0000
<<——————————————
0000 0000 0001 0100
答案:20
5、>>

这个符号这个叫做右移
int a = 5;
System.out.println(a>>2);

0000 0000 0000 0101
0000 0000 0000 0000
<<——————————————
1111 1111 1111 1110
答案:-1



6、~
这个叫做反码,个人理解就是给一个数取反-1
如:
int a =6;
System.out.println(~a);
答案:-7

0000-0000-0000-0110

1111-1111-1111-1001


这就是-6的二进制表示方式。
在负数的二进制最高位是1 因为是负数而且是二进制所以是1。

另外和大家说一道题,假如给你一个数5,怎么以快的方式得出20
如果你说4*5,那就说明你还不懂什么是一元运算 什么是 二元运算.
这题的答案是:5<<2
因为5<<2是一元运算
而 4*5是二元运算,运算步骤比一元多,所以效率没有一元运算高。

int a = 5;

int b = 4;

System.out.println(a&b);

答案:5

为什么会出现这个答案了?

0000-0000-0000-0101

0000-0000-0000-0100

|——————————————

0000-0000-0000-0101

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值