【详解】位运算符:位逻辑运算符,位移运算符(<<左移,>>右移)

        位运算符包括位逻辑运算符位移运算符。最近做算法的时候经常用到,现在来总结下。

        重点掌握的是 左移 << ,右移 >> 。

1.位逻辑运算符

那么位逻辑运算符怎么计算的呢?先看下位逻辑运算参照表:

0代表假,1代表真。

A&B:只有A、B同时为1的时候,结果为1。A、B其中一个为0,或都为0的时候,结果为0

A|B:A、B其中一个为1,或者都为1的时候,结果为1;A、B都为0的时候,结果为0

A^B:A、B的值相同的时候,则为0,A、B值不同的时候,结果为1

~A:A、B值相同结果为1,A,B值不同结果为0

 ①按位与&运算:全为1,结果为1

 ②按位或 | 运算:A、B其中一个为1,或者都为1的时候,结果为1;A、B都为0的时候,结果为0

 

 ③异或运算:A、B的值相同的时候,则为0,A、B值不同的时候,结果为1

 ④取反运算:1变0,0变1

 ⑤位逻辑运算也可以使用逻辑运算

2.位移运算符

① << 左移

举例:

1<<1:1左移1位,将1的二进制位所有的往左移一位。

1<<2:1左移2位,将1的二进制位所有的往左移两位

a<< n,a左移n位,将a的二进制位左移n位,相当于a*(2^n),a乘2的n次方。

 同样,short a = 9115,左移1位,左移2位。

采用高位溢出,低位补0的情况。

② >> 右移

举例:

32768>>1:1右移1位,将32768的二进制位所有的往左移一位。

32768>>2:1右移2位,将32768的二进制位所有的往左移两位.

a>> n,a右移n位,将a的二进制位右n位,相当于a/(2^n),a除以2的n次方。

负数的话,高位要0变1.

 ③ >>> 无符号右移:高位补0。byte short不适合做无符号右移。

  无符号右移规则和右移运算是一样的,只是填充时不管左边的数字是正是负都用0来填充,无符号右移运算只针对负数计算。

测试:

 public static void main(String[] args) {
        int a = 24;
        System.out.println("a右移2位:" + (a >> 2));
        System.out.println("a左移2位:" + (a << 2));
        System.out.println("a无符号右移:" + (a >>> 2));
    }

猜你喜欢

转载自blog.csdn.net/Sunshineoe/article/details/121384562