javascript - js中的位运算中的几个特殊的数字含义?
黄舟
黄舟 2017-04-11 09:06:18
[JavaScript讨论组]

最近在看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);
    

这些数字是不是有特殊的含义还是框架自定义的东西?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(2)
PHP中文网

没有深入研究,大概说一下,或许有不对的地方。
这是一种巧妙的方式来处理n中情况,要对这n种情况进行很合理的抽象才行。
其实,可以从位运算的一个作用来说明这个问题。
位运算一个很重要的作用,就是可以很快速的添加1,去除1(变为0)。
简单举例说明:
比如,对于一个二进制,110,我想要得到111,很显然我只需要110|111(110|001,110|011)就可以得到,可以看到这里要想得到111,我们可以的操作有n种实现(这就对应了n种可能)。

这里还有一个需要注意的,上面那些数字都是10进制的,js在进行位操作的时候自动转成2进制。

因为位操作没有怎么使用(我也没怎么用,貌似用过,但是没有达到bluebird这样),可以到网上找些资料来学习下,参考这里:

http://www.tuicool.com/articles/7bAFJr
大家讲道理

16777216转成二进制是1000000000000000000000000
65536转成二进制是10000000000000000
134217728转成二进制是1000000000000000000000000000

bitField 跟这些数字做与运算就是看bitField二进制的某一位上是否是1

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号