千家信息网

js位运算在实际中如何使用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了js位运算在实际中如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇js位运算在实际中如何使用文章都会有所收获,下面我们一起来看看吧。什么是位运算?
千家信息网最后更新 2026年11月01日js位运算在实际中如何使用

这篇文章主要介绍了js位运算在实际中如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇js位运算在实际中如何使用文章都会有所收获,下面我们一起来看看吧。

    什么是位运算?

    从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。

    按位运算符有6个

    &: 按位与\
    |: 按位或\
    ^: 按位异或\
    ~: 按位取反\
    >> : 右移\
    <<: 左移

    业务场景:

    我们大部分的业务开发场景下 只用if else 或 switch 条件处理就可以,但是当有如下场景:

    一个ci/cd 任务有: 1.等待中 -> 2.base image1 build完成 -> 3.base image2 build 完成 -> 4. base image3 build完成 -> 5.完成/失败
    当我们查询状态时:有可能出现这样的情况:

    任务处于 base image2 build 完成 但是我们查询base image1 build 完成时该任务也应被查询出来。

    任务处于完成状态,等我们查询 base image3 build完成 时该任务也应被查询出来

    是不是我们在数据库中存储的状态枚举值就比较麻烦?

    解决办法

    办法一:

    那么这时位运算就比较合适,定义如下枚举:

    {    waiting:      0b000001,    image1Finish: 0b000010,    image2Finish  0b000100,    image3Finish  0b001000,    finish:       0b010000,    fail:         0b100000,}

    那么 上面的 [第 1 种] 情况就可以表示为:0b000001| 0b000010 | 0b000100 (waiting|image1Finish | image2Finish) 按位或

    等我们判断是否是处于 image2Finish 的时候 就可以 status & image2Finish === image2Finish 这样判断 。

    status = 0b000001| 0b000010 | 0b000100 = 0b000111status & image2Finish = 0b000111 & 0b000100 = 0b000100(image2Finish)

    这样是不是很好判断? 同时提高了自己的代码逼格?减少很多 if else 的书写

    办法二:

    其实还有另外一种做法就是 质数 表示法:

    {    waiting:      3,    image1Finish: 5,    image2Finish  7,    image3Finish  11,    finish:       13,    fail:         17,}

    同样是上面的第一个情况:

    status = 3 * 5 * 7// 判断状态: 取模运算isImage2Finish = status % 7(image2Finish) === 0

    附:位运算的综合应用

    这里有个例子——不使用加减乘除来做加法,经常用来考察对位运算的掌握情况。读者可以先自行尝试分析和实现。

    不能用加减乘除,意思就是要你用位运算进行计算。以实际例子说明,如a = 81 = 0b1010001,b = 53 = 0b0110101。通过异或运算,我们发现异或把两个数相加但是不能进位,而通过与运算能够知道哪些位需要进位,如下所示:

     1010001^ 0110101 ---------  1100100  1010001& 0110101 ---------  0010001

    把通过与运算得到的值向左移一位,再和通过异或得到的值相加,就相当于实现了进位,这个应该不难理解。为了实现这两个数的相加可以再重复这个过程:先异或,再与,然后进位,直到不需要再进位了就加完了。所以不难写出以下代码:

    function addByBit(a, b) {    if (b === 0) {        return a;    }    // 不用进位的相加    let c = a ^ b;    // 记录需要进位的    let d = a & b;    d = d << 1;    // 继续相加,直到d进位为0    return addByBit(c, d);}let ans = addByBit(5, 8);console.log(ans);

    位运算还经常用于生成随机数、哈希,例如Chrome对字符串进行哈希的算法是这样的:

    uint32_t StringHasher::AddCharacterCore(uint32_t running_hash, uint16_t c) {  running_hash += c;  running_hash += (running_hash << 10);  running_hash ^= (running_hash >> 6);  return running_hash;}

    不断对当前字符串的ASCII值进行累加运算,里面用到了异或,左移和右移。

    关于"js位运算在实际中如何使用"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"js位运算在实际中如何使用"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

    运算 实际 任务 状态 查询 情况 办法 数据 知识 加减乘除 业务 两个 二进制 代码 例子 内容 场景 字符 字符串 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司简介 互联网科技公司的优势 互联网巨头反垄断金融科技 科技与互联网发展 北京互联网科技有限公司 互联网科技小贷 奇酷互联网络科技 开启互联网科技时代小说 成都互联网科技公司100强 移动互联网科技股 重庆威客帮互联网科技 茂名市互联网科技产业园 为客找房互联网科技公司怎么样 广东鹅鹅鹅互联网科技有限公司 江苏互联网智能科技产品出厂价 互联网科技企业商标注意事项 玉溪新华互联网科技怎么选 伍佰万互联网科技是干嘛的 山东亿川互联网科技有限责任公司 广州全民伙伴互联网科技有限公司 广州淘业互联网络科技 河南真二互联网科技有限公司 重庆互联网络科技 金融科技与互联网金融 贷财互联网科技 福州新华互联网科技学校 知乎 群盈汇互联网科技有限公司 深圳互联网科技的发展 产业互联网科技服务公司 广东鹅鹅鹅互联网科技有限公司
    0