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

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

      

      

      

      

      

  • 相关阅读:
    DRF小结
    js中BOM与DOM的概念与区别
    css单位分析、颜色设置与调色板
    css中伪类与伪元素的区别
    flexbox与grid layout的区别
    grid的简单使用
    position属性的总结
    html,css
    homework
    aboutme and my goal
  • 原文地址:https://www.cnblogs.com/coderls/p/6400422.html
Copyright © 2020-2023  润新知