java的位运算符 解析_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java的位运算符 解析

java的位运算符 解析

 2017/12/15 21:56:19  jifeng3321  程序员俱乐部  我要评论(0)
  • 摘要:在实际开发中一般不常用到java的位运算,但去看java的一些源码经常会看到这些位运算符,因为运算符的使用对运算效率会有一定的提升,特别是高重复运算,会节约相当的时间开支。Java位运算符列表如下:&与同为1则为1,其余为0|或一个为1则为1,否则为0^异或相同为0,不同为1~非为1则为0,为0则为1<<左位移将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)>>右位移将运算符左边的运算对象向右移动运算符右侧指定的位数
  • 标签:Java 解析
在实际开发中一般不常用到java的位运算,但去看java的一些源码经常会看到这些位运算符,因为运算符的使用对运算效率会有一定的提升,特别是高重复运算,会节约相当的时间开支。

class="MsoNormal">Java位运算符列表如下:

&

同为1则为1,其余为0

|

一个为1则为1,否则为0

^

异或

相同为0,不同为1

~

1则为0,为0则为1

<<?

左位移

将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0

>>?

右位移

将运算符左边的运算对象向右移动运算符右侧指定的位数。有符号右移位运算符使用了符号扩展:若值为正,则在高位插入0;若值为负,则在高位插入1

>>>?

无符号右移

无论正负,都在高位插入0

?

在了解位运算之前,先要了解一下二进制的一些表示方法,这里使用的是java语言(注意:在java中是不允许二进制表示的,允许八进制和十六进制),先来看一下十进制转二进制:

?

System.out.println(Integer.toBinaryString(10)); //打印结果:1010
System.out.println(Integer.toBinaryString(-10));//打印结果:11111111111111111111111111110110

?

1.???????? 对于正数的转换比较简单,比如上面的10,转换二进制后是1010

2.???????? 但对于负数的转换稍麻烦,先取负数的绝对值,-10的绝对值是10,二进制是1010,补足32位:00000000000000000000000000001010,然后取反:11111111111111111111111111110101,再+1,最终结果是:11111111111111111111111111110110,以上就是负数的二进制转换过程。

(一)?? 接下来再看具体的位运算:

  • ? & 按位与:

举例一:


System.out.println(5&6); //打印结果:4

运算过程:5转换二进制01016转换二进制0110,按照同为11的规则,结果是0100,转换成十进制是4

举例二:


System.out.println(-5&6); //打印结果:2

运算过程:-5转换成二进制111111111111111111111111111110116转换二进制00000000000000000000000000000110,按照同为11的规则,结果是00000000000000000000000000000010,转换成二进制是2

  • ?| 按位或:

举例一:

System.out.println(-5|-6); //打印结果:-5

运算过程:-5 转换二进制11111111111111111111111111111011-6转换二进制11111111111111111111111111111010,按照一个为1则为1的原则,结果是11111111111111111111111111111011,转换成十进制是-5

  • ? ~ 按位非:

举例一:


System.out.println(~-5); //打印结果:4

运算过程:-5转换二进制11111111111111111111111111111011,按照1001的原则,结果是00000000000000000000000000000100,转换十进制是4

  • ?^ 按位异或

举例一:


System.out.println(2^3); //打印结果:1

运算过程:2转换二进制00103转换二进制0011,按照相同为0,不同为1的原则,结果是0001,转换十进制是1

上一篇: 京东成“2017年度最佳单身福利企业” 提供夫妻房 下一篇: 没有下一篇了!
发表评论
用户名: 匿名