位运算之左移右移运算

首先我们先看下关于左移右移的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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容