Java基础|JAVA中的位运算操作

1、名词解释
首先,位移运算仅针对整数,非整数不支持位移运算。
①<<:左移操作符,低位补0。
②>>:算数右移符,高位补符号位。
③>>>:逻辑右移符,高位补0。
如果对byte、short类型移位,在移位运算前,它们会先被转成int类型,且返回值也是int类型。如果对long类型移位,则返回值也是long。
2、正负数换算
在java中最高位表示符号位,最高位0代表正数,最高位1代表负数。
【Java基础|JAVA中的位运算操作】用byte数据类型举例,byte占据8个二进制位:

01111111 正数(127) 11111111 负数(-1)

负数的换算方法 已知最高位为1,符号位不变,将其它位取反,然后+1即可得出对应负数。
以byte类型为例: 11111111 先取反-> 10000000 再加1-> 10000001 得出结果-> -1 10001111 先取反-> 11110000 再加1-> 11110001 得出结果-> -113 10101010 先取反-> 11010101 再加1-> 11010110 得出结果-> -86 10000001 先取反-> 11111110 再加1-> 11111111 得出结果-> -127

已知十进制负数,如何算出二进制原码 符号位不变,将剩下二进制位-1,然后取反即可得出原二进制码。
以byte类型为例: -1二进制-> 10000001 再减1-> 10000000 再取反得出结果-> 11111111 -113 二进制-> 11110001 再减1-> 11110000 再取反得出结果-> 10001111 -86二进制-> 11010110 再减1-> 11010101 再取反得出结果-> 10101010 -127 二进制-> 11111111 再减1-> 11111110 再取反得出结果-> 10000001

3、位移运算演示
因为1字节的byte进行位运算时,会被自动转成4字节的int再进行运算,我们这里直接使用int类型进行演示,方便解读。
  • 演示壹 100<<2=400
    Java基础|JAVA中的位运算操作
    文章图片

  • 演示贰 15>>2=3
    Java基础|JAVA中的位运算操作
    文章图片

  • 演示叁 1325400064<<2=1006632960
    Java基础|JAVA中的位运算操作
    文章图片

  • 演示肆 -1895825408>>2=-473956352
    Java基础|JAVA中的位运算操作
    文章图片

  • 演示伍 -1895825408<<2=1006632960
    Java基础|JAVA中的位运算操作
    文章图片

  • 演示陆 -1895825408>>>2=599785472
    Java基础|JAVA中的位运算操作
    文章图片

4、拓展
  • ~:二进制取反运算。
    演示 ~79=-80
    Java基础|JAVA中的位运算操作
    文章图片

  • &:二进制与运算
    演示 75&(-100)=8
    Java基础|JAVA中的位运算操作
    文章图片

  • |:二进制或运算
    演示 75|(-100)=-33
    Java基础|JAVA中的位运算操作
    文章图片

    推荐阅读