Javascript 位运算符(,|,^,<<,>>,>>>)

文章目录

  • 一、什么是位运算?
  • 二、如何使用
    • 1. 位与(AND):&
      • 用途
        • (1)数据清零
        • (2)判断奇偶
    • 2. 位或(OR):|
      • 用途
        • (1)向下取整
    • 3. 位异或(XOR):^
    • 4. 位非(NOT):~
    • 5. 左移(Left Shift):<<
    • 6. 右移(Right Shift):>>
    • 7. 无符号右移(Unsigned Right Shift):>>>
  • 注意优先级


一、什么是位运算?

位运算是一种对二进制数进行操作的技术,常用于优化算法处理底层数据。在JavaScript中,位运算符包括按位与(&)按位或(|)按位异或(^)左移(<<)右移(>>)无符号右移(>>>)。这些运算符可以对数字的二进制表示进行操作,实现一些特定的位级操作。例如,按位与运算可以用来提取特定位的值,按位或运算可以将特定位设置为1,按位异或运算可以进行位翻转等。通过合理使用位运算,可以提高代码效率和性能

二、如何使用

1. 位与(AND):&

两个位都为 1 时,结果才为 1。

5 & 3     // 在二进制中是 101 & 011 = 001 (十进制的 1)

用途

(1)数据清零
// 任何数 & 0都为 0
5 & 0 === 0
(2)判断奇偶

根据最未位是0还是1来决定,为0就是偶数,为1就是奇数

(a & 1) === 0 等价于 a % 2 === 0;
(5 & 1) === 1;
(4 & 1) === 0;

2. 位或(OR):|

两个位中至少有一个为 1 时,结果为 1。

5 | 3     // 在二进制中是 101 | 011 = 111 (十进制的 7)

用途

(1)向下取整
(3.6 | 0) === 3

位运算符| 0的工作原理是利用按位或运算符|将一个数字转换为32位有符号整数。这个操作会将数字的小数部分截断,只保留整数部分。原理如下:

  1. JavaScript中的数字是以64位浮点数的形式存储的,其中包含整数部分小数部分
  2. 当应用位运算符| 0时,会将数字转换为32位有符号整数
  3. 按位或运算符|会对数字的二进制表示的每一位进行按位运算。
  4. 由于32位整数无法表示小数部分,因此在进行按位或运算时,小数部分被截断,只保留整数部分。
  5. 最终的结果是一个32位整数,其中小数部分被丢弃,只保留整数部分。

3. 位异或(XOR):^

两个位相同则结果为 0,不同则结果为 1。

5 ^ 3     // 在二进制中是 101 ^ 011 = 110 (十进制的 6)

4. 位非(NOT):~

反转操作数的每一位,即将 1 变为 0,将 0 变为 1。

~5       // 在二进制中是 0000 0101 的 NOT 为 1111 1010,因为 JavaScript 使用 32 位整数,所以结果是 -6

5. 左移(Left Shift):<<

将一个数的所有位向左移动指定的位数,左边空出的位填充 0。左移一位相当于乘以 2 。

5 << 1    // 101 (5 的二进制) << 1 = 1010 (十进制的 10)
5 << 2    // 101 (5 的二进制) << 2 = 101000 (十进制的 20)

6. 右移(Right Shift):>>

将一个数的所有位向右移动指定的位数,右边空出的位填充符号位(左边最高位的值)。右移一位相当于除以 2 ,且结果总是向零截断。

5 >> 1    // 101 (5 的二进制) >> 1 = 0101 (十进制的 5)
-5 >> 1   // 1111 1111 1111 1111 1111 1111 1111 1011 (-5 的二进制补码) >> 1 = 1111 1111 1111 1111 1111 1111 1111 1110 (十进制的 -3)

7. 无符号右移(Unsigned Right Shift):>>>

将一个数的所有位向右移动指定的位数,右边空出的位始终填充 0。无符号右移不改变符号位,因此可以用于正数和负数。

5 >>> 1   // 0000 0101 (5 的二进制) >>> 1 = 0000 0010 (十进制的 2)
-5 >>> 1  // 1111 1111 1111 1111 1111 1111 1111 1011 (-5 的二进制补码) >>> 1 = 1111 1111 1111 1111 1111 1111 1111 1110 (十进制的 2147483646)

注意优先级

在JavaScript中,位运算符优先级相对较低的,位运算符的优先级低于算术运算符(如加法、减法)、关系运算符(如大于、小于)、逻辑运算符(如与、或)等常见运算符。如果表达式中包含多种类型的运算符,需要使用括号来明确指定运算的顺序,以确保逻辑正确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/19351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GO语言 gin框架 简述

原文地址 基本路由 Go语言中文文档 一、简介 Gin是一个golang的轻量级web框架&#xff0c;性能不错&#xff0c;API友好。 Gin支持Restful风格的API&#xff0c;可以直接从URL路径上接收api参数或者URL参数&#xff0c;也可是使用json或者表单 数据绑定的方式接收参数。 Gin响…

【传知代码】BERT论文解读及情感分类实战-论文复现

文章目录 概述原理介绍BERT模型架构任务1 Masked LM&#xff08;MLM&#xff09;任务2 Next Sentence Prediction (NSP)模型输入下游任务微调GLUE数据集SQuAD v1.1 和 v2.0NER 情感分类实战IMDB影评情感数据集数据集构建模型构建 核心代码超参数设置训练结果注意事项 小结 本文…

AIOps在线评测基准首阶段建设完成,面向社区发布真实运维数据!

本文根据必示科技算法研究员、产品总监聂晓辉博士在2024 CCF国际AIOps挑战赛线下宣讲会上的演讲整理成文。 2024年1月份OpenAIOps社区成立&#xff0c;随着越来越多的社区成员加入&#xff0c;各项工作在有条不紊的推进中。在线评测基准系统&#xff08;AIOps Live Benchmark&a…

积鼎CFDPro水文水动力模型,专为中小流域洪水“四预”研发的流体仿真技术

水动力模型与水文模型是水利工程与水文学研究中不可或缺的两大工具。水动力模型着重于流体运动的动力学机制&#xff0c;通过一系列方程组捕捉水流的时空变化&#xff0c;而概念性水文模型则侧重于流域尺度的水文循环过程&#xff0c;利用物理概念与经验关系进行近似模拟。两者…

Windows系统部署YOLOv5 v6.1版本的训练与推理环境保姆级教程

文章目录 一 概述二 依赖环境(prerequisites)2.1 硬件环境2.2 软件环境 三 环境安装3.1 创建并激活虚拟环境3.2 安装Pytorch与torchvision3.3 校验Pytorch安装3.4 下载 YOLOv5 v6.1 源码3.5 安装 YOLOv5 依赖3.6 下载预训练模型3.7 安装其他依赖3.8 测试环境安装3.9 测试训练流…

jupyter notebook更改位置

1.找到jupyer的配置文件 一般在c盘用户的.jupter文件夹下 2. 用记事本打开这个配置文件&#xff0c;定位到c.NotebookApp.notebook_dir /path_to_your_directory 替换你的位置 3.找到jupyer图标的位置&#xff0c;打开属性 添加要存放的位置在目标文件的末尾&#xff0c;重新…

python | spacy,一个神奇的 Python 库!

本文来源公众号“python”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;spacy&#xff0c;一个神奇的 Python 库&#xff01; 大家好&#xff0c;今天为大家分享一个神奇的 Python 库 - spacy。 Github地址&#xff1a;https:/…

一个全面了解Xilinx FPGA IP核的窗口:《Xilinx系列FPGA芯片IP核详解》(可下载)

随着摩尔定律的逐渐放缓&#xff0c;传统的芯片设计方法面临着越来越多的挑战。而FPGA以其并行处理能力和可编程性&#xff0c;为解决复杂问题提供了新的途径。它允许设计者在同一个芯片上实现多种不同的功能模块&#xff0c;极大地提高了资源的利用率和系统的综合性能。 FPGA…

领域数据模型建设步骤

领域数据模型建设步骤 以某音乐app为例: 1.数据调研和业务调研&#xff0c;识别业务过程&#xff0c;实体&#xff0c;关键指标 业务过程&#xff1a;播放&#xff0c;收藏&#xff0c;下载&#xff0c;点击&#xff0c;购买&#xff0c;支付 实体&#xff1a;音乐&#xff0c…

HCIA-ARP

ARP的由来 ARP这一种协议它会是在我们HCIA中第一个需要完全掌握的一个协议&#xff0c;不然对于数据通讯来说大家都会一直觉得很绕圈 协议栈&#xff0c;网线&#xff0c;网卡&#xff0c;它们组成了我们最小的数据通信的小脉络注&#xff1a;可以了解ARP攻击&#xff08;冒充访…

使用Java和MyBatis获取表头与数据

使用Java和MyBatis获取表头与数据 在数据处理与展示中&#xff0c;经常需要将数据库查询结果中的表头&#xff08;列名&#xff09;与实际数据提取出来。本文将介绍如何通过Java的JDBC和MyBatis来实现这一需求。 1. 使用JDBC获取表头与数据 在JDBC中&#xff0c;可以使用Res…

文献解读-群体基因组第二期|《中国人群中PAX2新生突变的检测及表型分析:一项单中心研究》

关键词&#xff1a;应用遗传流行病学&#xff1b;群体测序&#xff1b;群体基因组&#xff1b;基因组变异检测&#xff1b; 文献简介 标题&#xff08;英文&#xff09;&#xff1a;Detection of De Novo PAX2 Variants and Phenotypes in Chinese Population: A Single-Cente…

new CCDIKSolver( OOI.kira, iks ); // 创建逆运动学求解器

demo案例 new CCDIKSolver(OOI.kira, iks); 在使用某个特定的库或框架来创建一个逆运动学&#xff08;Inverse Kinematics, IK&#xff09;求解器实例。逆运动学在机器人学、动画和计算机图形学等领域中非常重要&#xff0c;它用于根据期望的末端执行器&#xff08;如机器人的…

Compose第四弹 Compose项目

目标&#xff1a; 1.可供学习的Compose项目 一、官方提供项目 谷歌官方提供的Compose项目&#xff1a; GitHub - android/compose-samples: Official Jetpack Compose samples. 项目及主要页面展现 1.1 Reply项目 1.首页底部TAB栏 2.侧边栏菜单&#xff1a;拖动滑出和收起…

建设现代智能工业-智能化、数字化、自动化节能减排

建设现代智能工业-智能化节能减排 遵循“一体化”能源管理(Integrated Energy Management)的设计宗旨&#xff0c;集成城市各领域(如工业.交通、建筑等&#xff09;的能源生产和消费信息&#xff0c;面向城市政府、企业、公众三类实体&#xff0c;提供“一体化”的综合能源管理…

uniapp h5项目切换导航栏及动态渲染按钮颜色

1.效果图 2.html,动态渲染按钮样式---三元判断 <!-- 切换栏 --><view class"statusList"><block v-for"(item,index) in list" :key"index"><view class"swiper-tab-list" :class"current item.id?activ…

CEEMDAN +组合预测模型(CNN-Transfromer + XGBoost)

注意&#xff1a;本模型继续加入 组合预测模型全家桶 中&#xff0c;之前购买的同学请及时更新下载! 往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 VMD CEEMDAN 二次分解&#xff0c;Transformer-BiGRU预测模…

静态加速和动态加速是啥区别

以下是两者之间的主要区别&#xff1a; 加速对象与内容&#xff1a; 静态加速&#xff1a;主要针对网页中的静态资源&#xff0c;如HTML文件、CSS文件、JavaScript文件、图片、Flash动画等。这些资源的特点是更新频率较低&#xff0c;适合通过缓存技术加速。 动态加速&#xf…

网络学习(11) |深入解析客户端缓存与服务器缓存:HTTP缓存控制头字段及优化实践

文章目录 客户端缓存与服务器缓存的区别客户端缓存浏览器缓存应用程序缓存优点缺点 服务器缓存优点缺点 HTTP缓存控制头字段Cache-ControlExpiresLast-ModifiedETag 缓存策略的优化与实践经验分享1. 使用合适的缓存头字段2. 结合使用Last-Modified和ETag3. 利用CDN进行缓存4. 实…

【JAVA WEB实用与优化技巧】如何自己封装一个自定义UI的Swagger组件,包含Swagger如何处理JWT无状态鉴权自动TOKEN获取

目录 一、Swagger 简介1. 什么是 Swagger&#xff1f;2. 如何使用 Swagger3. Springboot 中swagger的使用示例1. maven 引入安装2. java配置 二、Swagger UI存在的缺点1.不够方便直观2.请求的参数没有缓存3.不够美观4.如果是JWT 无状态登录&#xff0c;Swagger使用起来就没有那…