听说你看源码惊现 “左移右移位运算符“,不会?就一篇哥让你懂!

你的一键三连是我巨大的动力!

即熟悉又陌生的位移运算操作,熟悉是指源码或者面试中总有它的身影,陌生是指开发中你可能不常用 或者可能压根不知道怎么用,看不起谁呢?

看过 ArrayList 源码的小伙伴,对这一行代码一定不陌生,ArrayList一旦在添加时,不够实际容量就以1.5倍扩容,便是这一行代码。

将这行代码用文字描述就是,实际容量向右位移1得到它自身容量一半,再加上它自身刚好是它的1.5倍。
在这里插入图片描述
如果你觉得有点绕,没事,把这一篇轻松看完,相信你以后再次碰到这类源码,都会行云流水般畅快。

左移右移位运算符其实相当简单!

一、先搞懂二进制

首先知道二进制如何转十进制,这里用十进制 55,转成二进制就是这样 0011 0111

(没错,十进制在二进制的世界里只有 0 1 )
在这里插入图片描述
那怎么从二进制回到十进制呢?

找规律,两个步骤!

  1. 1 的数字
  2. 看数字 1 的位置
  3. 将数相加

先看步骤1,二进制中,1个数字对应一个为 2的数字;步骤2,1的位置代表着2的几次方。

从第一个数字1 开始, 2 0 2^{0} 20 = 1,第二个 2 1 2^{1} 21 = 2 …以此类推,最后相加。
在这里插入图片描述

二、搞懂左移右移位运算符

2.1左移位运算符

左位运算符 箭头往左的,没错,我知道你可能容易弄错,这不,细心的我已经帮你安排得明明白白。

【被右移数】 << 【右移几位】

左移几位相当于原有二进制基础上往左推进几位,如果是正数情况下就是推进几个 0

左移相当于乘,每向左移1位,相当于 * 2

55 * 4 = 220

不管左移还是右移改变的是1的位置,可以看到图中,第一个1因为左移2位,改变为 2 2 2^{2} 22 以此类推…而如果想要快速算出 十进制左移 2位也非常简单。

首先一样,懂得找规律,图中左移2位相当于 2 2 2^{2} 22 = 4,从规律可以看出

以此类推,假设再左移3位,那么 2 3 2^{3} 23 = 8,55 * 8 = 440
在这里插入图片描述
我们上面所演示都是正数情况下跟负数情况下右上面区别呢?
就是就是

2.1右移位运算符

事物总是会有两面,有左就会有右,会一键三连且聪明的你应该早就想到,事物的对立面一定是相反的!

这绝对是当然没错的!

右移位运算符,箭头是往右

【被右移数】 >> 【右移几位】

右移几位相当于原有二进制基础上往右推进几位

右移相当于除,每向右移1位,相当于 / 2

如图,跟55 / 4 =13 是一样的。
在这里插入图片描述

三、回到开头的那行代码

看完了左右位移,是不是发现贼简单,回到开头的那行代码,实际容量右移1(其实就是除以2嘛),相当于实际容量除以2,也就是它实际容量一半。

假设是实际容量为 10 >> 1,就是实际容量10/2=5,再次加上它自身容量15,就达到所谓每次容量不够以1.5倍扩容。
在这里插入图片描述

最后

我是一颗剽悍的种子 把我会的,认真的分享 是我写博客一直不变的信条
用有限的生命去学无限的知识注定是失败,所以我会用有限的时间,尽可能输出最有价值的知识

谢谢能遇见可爱又一键三连的你。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值