首页 > 技术文章 > Java中的位运算

XLS123 2021-04-28 16:35 原文

Java 定义的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括 long,int,short,char 和 byte。

  主要用来对操作数二进制的位进行运算。

位运算符分为位逻辑运算符和位移运算符两类:

1.位逻辑运算符包含 4 个:&(与)、|(或)、~(非)和 ^(异或)

  运算规则

    &:低位对齐,高位不足的补0,如果对应的二进制位同时为 1,那么该位的计算结果才为 1,否则都为 0。

    | :低位对齐,高位不足的补0。如果对应的二进制位只要有一个为 1,那么结果就为 1。

    ^:低位对齐,高位不足的补0,如果对应的二进制位相同为0,不同为1。

    ~:将操作数二进制中的 1 改为 0,0 改为 1。

  注:

     &&与&不同,前者为短路与,后者为逻辑与,
        A&&B,若A为假,则不计算B;A&B则不是依然计算B(前者更优)
     ||与|不同,前者为短路或,后者为逻辑或,
        A||B,若A为真,则不计算B;A|B则不是依然计算B(前者更优)
     且&&比||的优先级更高 , A && B || C 是先计算A&&B,结果再||C。

2.位移运算符包含2个:>>(右移) , <<(左移)

  >>:相当与/2

    按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补0(负数的情况下就是补1)。

  <<:相当与*2

    按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补0。

  注:

    >>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;
    >>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。

推荐阅读