JAVA中的位运算操作

1、名词解释

首先,位移运算仅针对整数,非整数不支持位移运算。

①<<:左移操作符,低位补0。

②>>:算数右移符,高位补符号位。

③>>>:逻辑右移符,高位补0。

如果对byte、short类型移位,在移位运算前,它们会先被转成int类型,且返回值也是int类型。如果对long类型移位,则返回值也是long。

2、正负数换算

在java中最高位表示符号位,最高位0代表正数,最高位1代表负数。

用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中的位运算操作_第1张图片

  • 演示贰 15>>2=3
    JAVA中的位运算操作_第2张图片

  • 演示叁 1325400064<<2=1006632960
    JAVA中的位运算操作_第3张图片

  • 演示肆 -1895825408>>2=-473956352
    JAVA中的位运算操作_第4张图片

  • 演示伍 -1895825408<<2=1006632960
    JAVA中的位运算操作_第5张图片

  • 演示陆 -1895825408>>>2=599785472
    JAVA中的位运算操作_第6张图片

4、拓展

  • ~:二进制取反运算。
    演示 ~79=-80
    JAVA中的位运算操作_第7张图片

  • &:二进制与运算
    演示 75&(-100)=8
    JAVA中的位运算操作_第8张图片

  • |:二进制或运算
    演示 75|(-100)=-33
    JAVA中的位运算操作_第9张图片

你可能感兴趣的:(Java基础,java)