起因

前一段时间发表了一篇ArrayList源码分析,一位少年私信我:
:像这种(oldCapacity >> 1)是什么?
:我说是位运算,通过二进制右移来进行计算。
:少年的疑问涌上了心头,位移?
:不懂了吧。少年,那我就给你讲讲位运算吧!

远看庐山

:位运算一共有七种,分别是&,|,~,^,<<,>>,>>>
:少年些许得意:我高中时候在数学学过,后面是数学像比大小。远远大于,远远小于。
:我说那(oldCapacity >> 1)取得是boolean值了啊,那这样和源码逻辑相符么?
:少年有些犹豫,不符。
:对啊,这是二进制的运算,刚才已经说了这个前提。记住这几个符号,我们直接进入精彩部分。

庐山步行

第一景色
看懂源码的基础,学会位运算
比如说:5&9,这个怎么求
1.首先要把它们转换为二进制。
5:00000101
9:00001001
:少年问我,那这个是怎么转化的?
:使用计算器啊,cmd-》calc啊。哈哈,不逗你玩了,我给你做个演示的过程。
看懂源码的基础,学会位运算:同理9也可以得到。我们再看看如何计算的呢??
2.计算按位于
看懂源码的基础,学会位运算
这时候我们就可以得到0000 0001,转换成十进制就是1
:那一是怎么得到的?
:我笑着说道:啊?因为1,所以1。算了,不逗你玩了。接下来看好了,别眨眼。

看懂源码的基础,学会位运算
:少年喜悦表情流露而出:我懂了。


第二景色
看懂源码的基础,学会位运算
我们继续通过9 | 5 进行分析。
看懂源码的基础,学会位运算
:按位或是一个为1,就可以得到1。
:少年说我发现规律。只要记住这些规律,就可以运算。
:不错。我们下来再看看。


第三景色
看懂源码的基础,学会位运算
:少年因为前几次的分析,已经渐生信心,谈到我来吧.
看懂源码的基础,学会位运算
少年突然有些蒙圈,这个怎么算。大哥。
:操作数,就是一个数,对一个数取反。
:我懂了,那我来试试.
看懂源码的基础,学会位运算
:对他们取反,得到1111 0110。把它转化为10进制得到246
:哈哈,不错。你说很对,少年。那我们在说说:按位异或


第四景色
看懂源码的基础,学会位运算
:那我们继续以9和5为例
看懂源码的基础,学会位运算
少年看看了,解了出来。竟嚣张到没有给我答案。好吧,读者们,你们自己根据规律,自行计算。


第五景色
看懂源码的基础,学会位运算
:少年看到这个移位,忽然有些沉默。我便说道按5来说,转化二进制对他移位
看懂源码的基础,学会位运算
会得到0001 0100。少年领会,便说,剩下的交给我了


第六景色
看懂源码的基础,学会位运算
按5为例,向右移该怎么算,少年已经胜券在握,不愿意多言。那只能交给读者你们了


第七景色
看懂源码的基础,学会位运算
以5为例,少年很快报出了答案,那剩下的只能交给读者们了。

庐山之上

站在庐山上面,很多人会感觉飘飘然,感觉位运算很简单,但切记:简单的东西要重复去做,才能把它变成本能。

相关文章:

  • 2022-12-23
  • 2021-12-17
  • 2021-11-17
  • 2021-11-19
  • 2022-12-23
  • 2022-12-23
  • 2021-07-14
  • 2021-07-06
猜你喜欢
  • 2021-12-31
  • 2021-07-06
  • 2021-06-10
  • 2021-07-25
  • 2022-12-23
  • 2021-06-02
相关资源
相似解决方案