位运算

位运算值得是直接对整数在内存中对二进制位进行操作的一类运算,以下是常见的位运算类型及其特点:

与
  • 特点:对参与运算的两个数的每一位进行比较,如果对应位都是1,则结果位为1,否则结果位为0
  • 使用场景:掩码操作,例如,个整数的特定位是否是1,以确定某个标识是否已启用。例如,假设一个整数flag存储多个布尔标识(第0位代表flagA,第一位代表flagB),可以使用掩码0b01(二进制表示,即十进制的1
javaScript 复制代码
    const flagBEnabled = (flags & 0b01) !== 0
  • 性质
  1. 任何数和0结果都是0
  2. 任何数和1结果都是本身
  3. 相同位上,两个操作数均为1,结果为1,否则为0
或
  • 特点:对参与运算的两个数的每一位进行比较,如果对应位中至少有一个位1,则结果位为1,否则结果位为0

  • 使用场景:设置特定位,例如,给一个整数的特定位设置为1,以启用某个标识。沿用上面的例子,如果要一用flagB,可以这样做:

    flags |= 0b01

异或

  • 特点:对参与运算的两个数进行对比,如果对应位不同(一个为1,一个为0),则结果位为1,否则结果位为0
  • 使用场景:交换(翻转)特定位。例如,切换一个整数的特定位的值(0变1,或1变0)以切换某个标识的状态,继续上面的例子,切换flagB的状态
  • 性质
  1. 任何数和自身做异或运算,结果都是0
  2. 任何数和0做异或,结果都是原来的数
  3. 异或运算满足交换律和结合律
复制代码
flags ^= 0b01

按位取反

  • 特点:将操作数的所有位数取反(0变成1 1变成0)
  • 使用场景:生成补码或翻转所有位,例如,计算一个整数的补码,或者简单的翻转所有位

左移

  • 特点:将操作数的二进制向左移动指定的位数,空出的低位用0补充,高位溢出则丢弃
  • 使用场景:快速乘二的幂方,例如:将一个整数乘以2的n次方,可以使用左移n位实现

右移

  • 特点 将操作数的二进制位向右移动指定的位数,空出的高位填充方式取决于语言规范(有符号整数通常用符号位扩展,无符号整数用 0 填充)
  • 使用场景:快速除以 2 的幂次方。例如,将一个整数除以 2 的 n 次方,可以使用右移 n 位实现:

实战

相关推荐
论文复现现场19 分钟前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi22 分钟前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
志尊宝24 分钟前
AI原生前端开发(039):AI辅助的Nuxt 4全栈开发
前端·vue.js·ai-native
FRing031 小时前
JavaScript入门到精通三十二(深拷贝、浅拷贝、递归函数)
开发语言·前端·javascript
秋天的怀念_David1 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
excel2 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
外收内放2 小时前
Python基础语法练习题(73)
java·前端·python
风骏时光牛马2 小时前
面向复杂场景的大模型应用落地与能力优化实践
前端
碧海银沙音频科技研究院2 小时前
在PC电脑上用Whisper→Marian算法实现离线语音翻译功能
算法·whisper
小小善后师2 小时前
我做了个病历归档小程序,被 AI 识别的"最后一公里"狠狠上了一课
前端