博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中的位运算
阅读量:6951 次
发布时间:2019-06-27

本文共 1158 字,大约阅读时间需要 3 分钟。

在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时,运算将不再继续进行,

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

  

  

 

  

  

  

 

转载于:https://www.cnblogs.com/coderls/p/6400422.html

你可能感兴趣的文章
杂项随记:gcc/objdump/section等
查看>>
webstrom的坑
查看>>
正则表达式
查看>>
对我影响最大的三位老师
查看>>
第三天
查看>>
关于《半反去雾算法》一文的四宗罪。
查看>>
深度学习与计算机视觉系列(1)_基础介绍
查看>>
网站高并发解决方案参照http://www.toplee.com/blog/71.html
查看>>
grid++报表使用时注意事项
查看>>
【leetcode】Find Largest Value in Each Tree Row
查看>>
Android创建和使用数据库
查看>>
25、Python之禅
查看>>
YOLOv3的Darknet在OpenCV3.4.1(bug)下编译出错填坑
查看>>
有意义的命名
查看>>
POJ——3517
查看>>
POJ 2886
查看>>
shiro登录步骤源码分析
查看>>
Java进阶篇(二)——抽象类、内部类
查看>>
将Redis设置为后台启动
查看>>
为自己的博客园添加右侧目录
查看>>