最近在看bluebird中的源码,里面涉及到js中的位运算,对于位运算虽然不是很清楚,但查看文档,基本上明白了,但自始至终对于里面涉及的几个数字实在不明白,望各位指点迷津:
下面是涉及的代码段:
if ((this._bitField & 117506048) !== 0) return;
if ((bitField & 50397184) === 0)
if ((bitField & 33554432) !== 0)
if ((bitField & 16777216) !== 0)
if ((bitField & 65536) !== 0)
if ((bitField & 33554432) !== 0)
if((bitField & 134217728) !== 0);
这些数字是不是有特殊的含义还是框架自定义的东西?
没有深入研究,大概说一下,或许有不对的地方。
这是一种巧妙的方式来处理n中情况,要对这n种情况进行很合理的抽象才行。
其实,可以从位运算的一个作用来说明这个问题。
位运算一个很重要的作用,就是可以很快速的添加1,去除1(变为0)。
简单举例说明:
比如,对于一个二进制,110,我想要得到111,很显然我只需要110|111(110|001,110|011)就可以得到,可以看到这里要想得到111,我们可以的操作有n种实现(这就对应了n种可能)。
这里还有一个需要注意的,上面那些数字都是10进制的,js在进行位操作的时候自动转成2进制。
因为位操作没有怎么使用(我也没怎么用,貌似用过,但是没有达到bluebird这样),可以到网上找些资料来学习下,参考这里: