深圳信狮学习部同学分享“位运算符”

时间:2016-06-22 06:37:25    来源:信狮教育    已有人浏览
分享到:
导读:深圳信狮学校学习部同学分享位运算符。虽然目前的学习可能还没用到位运算符,但是如果你想往底层发展,该运算符你必须掌握,这就是位运算该运算符的优点在于其效率比普通的运算方

深圳信狮学校学习部同学分享“位运算符”。虽然目前的学习可能还没用到位运算符,但是如果你想往底层发展,该运算符你必须掌握,这就是“位运算”该运算符的优点在于其效率比普通的运算方式效率高,而底层就会牵扯到很多资源效率等问题,如果效率不高会根本运行不了。
那么什么是位运算符?

常用的位运算符:

1、&

2、|

3、^

4、>>

5、<<

6、~

可能大家会有疑问,&和| 不是和&& , ||很相似,功能一样吗?其实不然 & ,| 是位运算,也可以跟正常的&& ,|| 一样用,但是会有一个判断性能上的问题.

这里的 & 和| 在判断的时候 会判断2个条件 而&& 和 || 却不会,这就是短路,如:

booleana = false;

boolean b=true;

if(a&& b){

System.out.println("逻辑运算符");

}

if(a& b){

System.out.println("位运算符");

}

在上面if 判断语句中结果是一样的,但是处理方式却不一样,

&& 的处理方式是先判断a是true 还是 false ,由于我给a是false 所以这个if判断就会结束,而不会再次判断(&&的判断是2个条件都是true才成立)

&的处理方式却和&&的处理方式截然不同,而是判断了a 发现是false,也不会结束而是继续判断b,从这点上我们就可以知道 &&的效率比&的效率高,

这个叫做“短路”。

|和 ||也是同理,我就不多做介绍了。

其实在程序中的所有数据在计算机内存中都是以二进制的形式存储的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,&运算本来是一个逻辑运算符,但整数与整数之间也可以进行&运算。举个例子,6的二进制是110,11的二进制是1011,那么6&11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理)

1、&:

实例:

inta = 5;

intb = 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 // false &&false=false

0和 1 = 0//false &&true=false

1和 1 = 1//true &&true=true

2、|:

实例:

inta = 5;

intb = 4;

System.out.println(a|b);

答案:5

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

0000-0000-0000-0101

0000-0000-0000-0100

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

0000-0000-0000-0101

原理不变,因为是|所以:

0和0 =0//false&& false=false

1和0 =1//true&& false=true

1和1 = 1//true&& true=true

3、^

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

inta = 5;

intb = 4;

System.out.println(a^b);

答案:1

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

0000-0000-0000-0101

0000-0000-0000-0100

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

0000-0000-0000-0001

该运算符的运算规律是:

0和 0 = 0//false && false=false

0和 1 = 1//false && ture=true

1和 1 = 0//true && true=true

该运算符有个特点,有个特点就是一个数异或一个数得出的数,再异或上一个被异或的数,会得出异或的数。

如:

inta = 5;

intb = 4;

intc = a^b;

System.out.println(c^a);

答案是:4

4、>>(右移)

7 >> 2 = 0000 0111 >>2 = 0000 0001 = 1

0000-0000-0000-0111

0000-0000-0000-0001

这里向右移动了2位,最低位的两个1被抹去,被抹去的部分补零

这里右移两位等于除了2的2次方,7/4 = 1 在整数除法中则看成是被舍掉了小数部分。

5、<<(左移)

14 << 2=56,

0000-0000-0000-1110

0000-0000-0011-1000

因为 14 (即二进制的 00001110)向左移两位等于 56 (即二进制的 00111000)。

如果也行上面的例子同学们还不明白,我用不同颜色来示范

假如要<<2位

红色:开始

黄色: 结束

0000-0000-0000-0011

0000-0000-0000-1100

0000-0000-0000-1100

0000-0000-0011-0000

>>4

0000-1111-0000-0000

0000-0000-1111-0000

0000-0000-0011-1100

0000-0000-0000-0011

6、~

这个叫做反码,个人理解就是给一个数取反-1

如:

inta =6;

System.out.println(~a);

答案:-7

0000-0000-0000-0110

1111-1111-1111-1001

这就是-6的二进制表示方式。

在负数的二进制最高位是1 因为是负数而且是二进制所以是1。

哪个说了一大堆,同学们可能会出现以下情况,如有雷同纯属巧合:

同学A:这什么跟什么啊,哪里效率高了,全是二进制的运算,搞的我都晕了,

解:普通的*/都是二元运算,而位运算是一元运算所以在效率这方面比较高,我给同学们分析底层运算是因为有些公司的笔试会考。

同学B:这是C语言的东西,咱们学java的完全用不到。

解:同学们都知道,java是从c语言优化过来的一门高级语言,移除了C语言的难控制的指针等等,并在此基础上回炉重造的语言,设计者既然保留其特性,说明其特性还是有利益,俗话说的好技多不压身。

同学C:不就是效率吗,我现在xxx设备,处理速度都是xxx的快,别跟我谈性能。

解:这是国人最容易犯的毛病,像老外在性能优化这方面特别注意,这也是老外能领先于IT技术的前沿之一。

  • 易*斌:有梦想,敢拼搏,成功永远不会迟到

      姓名:易*斌  学历:中专  年龄:32岁(就读时24岁)  毕业时间:2010年9月  入职企业:深圳市*狐科技有限公司  职务:运维主

  • 谢*同学:北大青鸟我赢得了角色转变的机会

    不知不觉中,一年半过去了,而我完成了人生中的一次跨越,一次职业的转换,并找到了一个全新的自我,一个充满激情与勇于面对挑战的自我。

  • 夏*同学:我的工作和生活都发生了改变

    时光飞逝,转眼之间我已从北大青鸟信狮教育毕业,看一看现在的自己真的感觉很是欣慰,我现在取得的成就,不仅归功于自己的努力,更要感谢信狮教育的老师们对我就业的帮助及指导,使我

  • 陈*同学:一名普通的女高中生程序猿高薪之路

    姓名:陈*同学学历:高中年龄: 25岁入职企业:软*动力信息技术(集团)有限公司职务:Java软件工程师薪资:16000元 月企业介绍:软*动力信

  • 石柱:走好每一步,干好每一件事情

    姓名:石柱年龄:19岁学历:大专就职企业:深圳市网合科技有限公司就职岗位:Java软件工程师就业薪资:4000元公司简介:深圳市网合科技股份

热点专题 更多 >
热门标签 更多 >
教学研讨 大礼 国庆 齐贺 博物馆 游记 预赛 帷幕 实战 论坛 大家庭 典礼 学生 设施 环境 食堂 拔河比赛 课外活动 闹元宵 精英