Java中的位运算

在Java运算中有一种较为神秘的运算符——“位运算符”,说它神秘,主要是考虑到它的不常用性,一般在运算中,权限管理和游戏开发涉及到位运算比较多。

Java位运算符有:~(取反),&(和),|(或),^(亦或),>>(右移),<<(左移)。

那么位运算符到底是什么呢,见名知义,我们都知道,一字节等于8位,“位操作”就是在位级别上,对数值(二进制)进行操作运算,我们将对几种位运算一一解读:

1、~(取反)

  首先我们要知道二进制在内存中是以补码存储的,二进制的第一位为符号位,0表示正数,1表示负数。

正数:

  补码、反码与原码都是一样的。

负数:

  反码是原码的符号位不变,其余各位取反得到的,

  补码是在反码的基础上加1。

例1:~8在内存中的求解步骤:

  8的二进制是1000(第一位的0表示为正数)

  也就是说其补码为01000,

  补码取反得10111,

  结果的反码为:10111减去1得10110(为负数)

  结果的原码为:11001(符号位不变,其余各位取反)

  结果即为:-9

例2:~(-9)在内存中的求解步骤:

  9的二进制是1001

  也就是说-9的原码是11001,

  反码为:10110(符号位不变,其余各位取反),

  补码为:10111,

  然后补码取反为:01000,

  结果的补码为01000(正数),

  那么结果的反码,原码均为01000,

  结果即为:8

总结:

 2、&(和)

  对两个数值的二进制位进行和运算

  8的二进制是1000

  4的二进制是0100

  那么8&4的二进制为0000,即为0

 3、|(或)

  对两个数值的二进制位进行或运算

  8的二进制是1000

  4的二进制是0100

  那么8|4的二进制为1100,即为12

4、^(亦或)

  对两个数值的二进制位进行亦或运算,对应位不同则为1,否则为0

  8的二进制是1000

  4的二进制是0100

  那么8^4的二进制为1100,即为12

5、左移和右移

  右移一位相当于除以2求商

  左移一位相当于乘以2求积

例如:12>>2=3

   2<<3=16

6、扩展 

  位操作中的&、|与逻辑运算符&&、||有明显的区别:

  1.它们均属于二元运算符,逻辑运算符两边只能是逻辑值,而&、|两边不仅可以是逻辑值,还可以是数值,进行位操作。

  2.逻辑运算符又称短路运算符,当&&左边为false时,运算将不再继续进行,当||左边为true时,运算将不再继续进行,

  而&、|则会继续判断,相比之下,效率较低。

  

  

 

  

  

  

 

posted @ 2017-02-15 10:43  旧城孤音  阅读(876)  评论(0编辑  收藏  举报