当前位置: 首页 > news >正文

JS使用~、>>、<<、>>>、|来取整,有啥区别

在 JavaScript 中,可以使用位运算符 ~>><<>>> 和 | 来实现取整操作,但它们的原理和效果有所不同。以下是它们的区别:

1. |(按位或)取整

  • 原理x | 0 将 x 与 0 进行按位或操作,会将 x 转换为 32 位有符号整数(丢弃小数部分)。

  • 效果

    • 正数:向下取整(Math.floor)。

    • 负数:向 0 取整(类似 Math.trunc)。

  • 示例

    3.14 | 0;    // 3
    -3.14 | 0;   // -3

2. ~~(双按位非)取整

  • 原理~~x 等价于 -(-x | 0) | 0,即两次取反,仍然会转换为 32 位整数。

  • 效果

    • 正数:向下取整(Math.floor)。

    • 负数:向 0 取整(类似 Math.trunc)。

  • 示例

    ~~3.14;     // 3
    ~~-3.14;    // -3

3. >>(有符号右移)取整

  • 原理x >> 0 将 x 右移 0 位,仍然会转换为 32 位有符号整数。

  • 效果

    • 正数:向下取整(Math.floor)。

    • 负数:向 0 取整(类似 Math.trunc)。

  • 示例

    3.14 >> 0;   // 3
    -3.14 >> 0;  // -3

4. <<(左移)取整

  • 原理x << 0 将 x 左移 0 位,仍然会转换为 32 位有符号整数。

  • 效果

    • 正数:向下取整(Math.floor)。

    • 负数:向 0 取整(类似 Math.trunc)。

  • 示例

    3.14 << 0;   // 3
    -3.14 << 0;  // -3

5. >>>(无符号右移)取整

  • 原理x >>> 0 将 x 转换为 32 位 无符号整数,适用于非负数。

  • 效果

    • 正数:向下取整(Math.floor)。

    • 负数:会转换为很大的正数(因为是无符号整数)。

  • 示例

    3.14 >>> 0;   // 3
    -3.14 >>> 0;  // 4294967293(即 2^32 - 3)

总结对比

运算符取整方式适用数值范围是否支持负数类似方法
`x0`向 0 取整32 位有符号整数Math.trunc
~~x向 0 取整32 位有符号整数Math.trunc
x >> 0向 0 取整32 位有符号整数Math.trunc
x << 0向 0 取整32 位有符号整数Math.trunc
x >>> 0向下取整32 位无符号整数否(负数会变正)Math.floor(仅正数)

 注意事项

  1. 32 位限制:所有位运算取整都会将数值限制在 32 位范围内(-2^31 到 2^31-1),超出会溢出。

  2. 负数处理

    • |~~>><< 对负数的取整方式是向 0 取整(类似 Math.trunc)。

    • >>> 对负数会返回无符号整数,通常不符合预期。

  3. 可读性:位运算取整虽然高效,但可读性较差,建议在必要时使用,或直接用 Math.truncMath.floor 等标准方法。

相关文章:

  • 软件技术专业的出路在哪
  • 【浏览器插件】如何开发一个Chrome浏览器插件
  • Flink基础知识
  • 实战指南:用DataHub管理Hive元数据
  • uni-app总结2-所需知识储备和学习途径
  • Android ViewBinding 简述
  • SQL基础知识,MySQL学习(长期更新)
  • 深入解析线程池与队列系统设计原理
  • 以list为输入条件,查询数据库表,java中的mapper层和mybatis层应该怎么写?
  • C++11多线程内存模型:从入门到精通
  • 配置DHCP服务(小白的“升级打怪”成长之路)
  • 基于电力载波的智能照明系统:技术优势与市场前景分析​
  • Flask 中 make_response 与直接返回字符串的深度解析
  • 介绍下分布式ID的技术实现及应用场景
  • 使用 Visual Studio 创建安装包的完整指南
  • ​​网络工程师知识点精讲与例题解析:数据链路层技术​​
  • typescript vs go vs rust
  • linux USB Function Filesystem介绍
  • AI自动生成复杂架构图,流程图,思维导图
  • Model 复现系列(二)ACT-Plus-Plus Mobile ALOHA
  • 中国水电建设招标网站/免费下载百度到桌面
  • wordpress 炫酷博客/seo搜索引擎优化价格
  • 哪家做网站/推广引流哪个软件最好
  • 无锡网站关键词优化/android优化大师
  • 龙岩网站建设推广/属于免费的网络营销方式
  • 图书馆网站制作/seo原创工具