位运算之左移右移运算

首先我们先看下关于左移右移的Java代码及其结果:

class BitOperation {
    public static void main(String[] args) {
        System.out.println("3<<2" + 3<<2);
    }
}

输出结果为:12

注:我们常说的左移右移都是指的是对原数据换算成二进制之后的操作

左移操作(<<)

规则:
右边空出的位用0填补
高位左移溢出则舍弃该高位。
3 在32位计算机中的存储为(前后两条黑色竖线人为添加以方便于识别):

| 0000 0000 0000 0000 0000 0000 0000 0011 |

左移2位结果如下:

00 | 00 0000 0000 0000 0000 0000 0000 0011 XX |

左移两位高位溢出,舍弃,低位也就是XX的位置空余,则补0变为:

| 0000 0000 0000 0000 0000 0000 0000 1100 |

再转换为十进制数:输出即为:12
我们再看个例子:这次操作 3<<3位,大家计算看看:答案为:24;

| 0000 0000 0000 0000 0000 0000 0001 1000 |

大家也可以对其他数字进行左移操作试试,经过多次操作我们可以得出:左移几位其实就是该数据乘以2的几次方
也就是以上例子可以通过以下式子快速算出:

3<<3 == 3(2)^3 = 38 = 24;
3<<2 == 3(2)^2 = 34 = 12;

右移操作(>>)

左边空出的位用0或者1填补。正数用0填补,负数用1填补。

简单点记:就是高位是什么就用什么补!

例如:6>>1

| 0000 0000 0000 0000 0000 0000 0000 0110 |

我们进行右移操作

| 0000 0000 0000 0000 0000 0000 0000 0011 | 0

则结果为 6>>1 = 3 == 6 / (2^1)

大家也可以对其他数字进行左移操作试试,经过多次操作我们可以得出:右移几位其实就是该数据除以2的几次幂,若为小数,取整即可
-6>>2 = 3 == - 6 / (2^2) = -1

你可能感兴趣的:(位运算之左移右移运算)