JS位运算

news/2024/7/19 15:42:49 标签: js

文章目录

  • 简介
  • `&`
    • 例子
  • `|`
    • 例子
  • `~`
    • 负数的存储方式
      • 真码
      • 反码
      • 补码
    • 取反
    • 便捷操作
      • 快速取整
  • 异或运算
    • 例子
  • 移位
    • 左移`<<`
    • 例子
      • 规律
      • 负数
    • 右移`>>`
      • 例子
        • 规律
    • 全右位移
      • 例子

专栏目录请点击

简介

  • 计算机对于二进制数据的运算就叫做为运算,即将一个整数的二进制格式进行运算,先转化为二进制数,然后进行运算
  • 十进制转化为二进制工具 点击

&

  • 写法为表达式1 & 表达式2
  • 参加运算的两个数据,按二进制位进行“与”运算
  • 两位同时为“1”,结果才为“1”,否则为0,就是将两个整数的每一个二进制位进行比较,如果都为1,结果才为1,其余情况全部为0;

例子

  • 1 & 2
  • 1 对应的二进制是–0000 0000 0000 0000 0000 0000 0000 0001
  • 2 对应的二进制是–0000 0000 0000 0000 0000 0000 0000 0010

进行运算

js">由于前28位都为0,结果与运算后肯定也全为0,这时就算后四位

- 0 0 0 1 -
- 0 0 1 0 -
- -----------
- - 0 0 0 0 -  //结果为0000,转换为十进制为0,那么1 & 2的结果就为0

|

  • 表达式1 | 表达式2

  • 计算步骤

  • 将比较的两个整数,先转换为32位二进制,然后每一位进行比较,全0才为0,其余情况全为1

例子

  • 1 | 3
  • 1 对应的二进制是0000 0000 0000 0000 0000 0000 0000 0001
  • 3 对应的二进制是0000 0000 0000 0000 0000 0000 0000 0011

进行计算

js">由于前30位全为0,与运算后也全为0,可以不计入计算


- 0 1 -
- 1 1 -
- -------- -
-  1 1 -     //二进制11,需要补齐32位才可以转换为十进制,那么1 | 3的结果就为3

~

  • ~表达式
  • 将这个整数全部二进制位按位取反,0变成1,1变成0

负数的存储方式

真码

-1的真码表示

> 1000 0000 0000 0000 0000 0000 0000 0001   //符号位为-表示负数,最后一位为1,表示1

使用的是8位二进制表示,但是实际上计算机存储的时候并不是这样存储的

反码

  1. 计算机拿出负数的真码
  2. 符号位不动,其余全部取反,这个时候叫做反码

补码

  1. 反码加上1就可以得到补码
  2. 计算机中存储的负数就是存储的补码
拿出真码    --> 1000 0000 0000 0000 0000 0000 0000 0001  // 也叫原码
得到反码    --> 1111 1111 1111 1111 1111 1111 1111 1110  // 真码取反
得到补码    --> 1111 1111 1111 1111 1111 1111 1111 1111  // 反码加1

所以,-1在计算机中的存储就是`1111 1111 1111 1111 1111 1111 1111 1111

以上方法只是负数的存储,正数在计算机中的存储原反补相同

取反

~1

  1. 1对应的二进制是0000 0000 0000 0000 0000 0000 0000 0001
  2. 对于二进制进行取反1111 1111 1111 1111 1111 1111 1111 1110
  3. 这个是得到存储在计算机中的补码,但是需要得到真码才能转化为二进制,下面开始转化为真码
  4. 先得到反码1111 1111 1111 1111 1111 1111 1111 1101补码-1就得到反码
  5. 然后转化为真码1000 0000 0000 0000 0000 0000 0000 0010符号位不变,其余全部取反,得到真码
  6. 真码转化为二进制位-2,所以~1的结果为-2

便捷操作

上面操作,确实可以得到一个数的取反的记过,但是过于繁琐,这里有一个便捷的方法

~x=-x-1

举例如下

~1 = -1-1 = -2
~2 = -2-1 = -3
~-2 = 2-1 = 1

快速取整

~~小数

举例如下

~~3.12345 = 3

异或运算

  • 数字1 ^ 数字2
  • 将数字1和数字2按32位二进制进行比较,不同为1,相同为0

例子

1 ^ 2

  1. 1对应的二进制为0000 0000 0000 0000 0000 0000 0000 0001
  2. 2对应的二进制为0000 0000 0000 0000 0000 0000 0000 0010
  3. 进行运算
js">-- 0 1 --
-- 1 0 --
---------
-- 1 1 --  // 二进制补齐32位,转换成十进制后,结果为3

移位

左移<<

  • num<<n:他会先把num转化为二进制,然后左移n

例子

  • 3 << 1
  1. 3对应的二进制为0000 0000 0000 0000 0000 0000 0000 0011
  2. 左移一位后是0000 0000 0000 0000 0000 0000 0000 0110
  3. 所以3 << 1 的结果为 0110 ,转换为十进制为6

左移运算,是整个32位向左移动,最后移动多少位,后面补多少0

规律

由上面的例子可以得出左移的规律num * n的2次方

负数

js">-10<<2 // -40

右移>>

右位移可能会丢失精度

  • 数字1 >> 数字2
  • 右位移:将数字1的二进制位(除符号外),右位移数字2的次数

例子

  • 3 >> 1
  1. 3对应的二进制为0000 0000 0000 0000 0000 0000 0000 0011
  2. 右移一位后是0000 0000 0000 0000 0000 0000 0000 0001
  3. 所以3 >> 1 的结果为 0001 ,转换为十进制为1

右移运算,是整个32位向右移动,最后移动多少位,符号位不变,前面补多少

规律

如上面3 >> 1,右移就相当于 3 / 2^1,然后去整数部分,也就是1

全右位移

  • 数字1 >>> 数字2
  • 运算过程与右位移差不多,但是,全右位移,符号位会跟着移动

例子

-1 >>> 1

  1. -1对应的二进制为1111 1111 1111 1111 1111 1111 1111 1110
  2. 全右位移后是0111 1111 1111 1111 1111 1111 1111 1111
  3. 转化为10进制是2147483647
  • https://blog.csdn.net/m0_67502005/article/details/128036344

http://www.niftyadmin.cn/n/250043.html

相关文章

QML事件处理之键盘事件(KeyEvent)和焦点作用域(FocusScope)

事件 1.按键处理概述2. 导航键 1.按键处理概述 当用户按下或者释放一个按键&#xff0c;会按以下步骤进行处理&#xff1a; ①Qt获取键盘动作并产生一个键盘事件。 ②如果QQuickWindow是活动窗口&#xff0c;那么键盘事件会传递给它。 ③场景将键盘事件交付给具有活动焦点的项…

JS编程中的API hook

JavaScript奇技淫巧&#xff1a;Hook与反Hook 作者&#xff1a;专注于JS混淆加密的 JShaman API HOOK技术&#xff0c;在PC时代曾盛行&#xff0c;是高端的技术。在JavaScript编程中&#xff0c;也可以应用API Hook技术实现不寻常的效果。 例&#xff0c;eval hook&#xff1a…

TOOM解析如何搭建一套适合自己的舆情监测系统?完整的实战指南

随着互联网的普及和社交媒体的盛行&#xff0c;人们在网络上的活动越来越多&#xff0c;同时也涌现出大量的信息和舆情。这些信息和舆情在一定程度上会影响社会和个人的发展和进步。因此&#xff0c;舆情监测逐渐成为一项重要的任务。在本篇文章中&#xff0c;我们将为大家介绍…

HTTP 的工作原理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、简单 HTTP二、HTTP 连接请求 I请求Ⅱ 持久 HTTP并执行 HTTP默认浏览器连接设置总结 前言 在处理 Web 性能监控或优化时&#xff0c;了解 HTTP 协议的基础知…

最新入河排污口设置论证、水质影响预测与模拟、污水处理工艺分析及建设项目入河排污口方案报告书

随着水资源开发利用量不断增大&#xff0c;全国废污水排放量与日俱增&#xff0c;部分河段已远远超出水域纳污能力。近年来,部分沿岸入河排污口设置不合理&#xff0c;超标排污、未经同意私设排污口等问题逐步显现&#xff0c;已威胁到供水安全、水环境安全和水生态安全&#x…

ROS学习第二十三节——TF坐标变换实操

1.综述 需求描述: 程序启动之初: 产生两只乌龟&#xff0c;中间的乌龟(A) 和 左下乌龟(B), B 会自动运行至A的位置&#xff0c;并且键盘控制时&#xff0c;只是控制 A 的运动&#xff0c;但是 B 可以跟随 A 运行 结果演示: 实现分析: 乌龟跟随实现的核心&#xff0c;是乌龟…

把脉分布式事务的模型、协议和方案

在当前的技术发展阶段&#xff0c;不同的业务场景对一致性、可靠性、易用性、性能等要求不同&#xff0c;应用架构可以根据实际场景的需求&#xff0c;灵活选择合适的分布式事务解决方案。行业中把分布式事务解决方案分为刚性事务方案和柔性事务方案这两大类。 就刚性事务这个…

linux命令----- mkdir与rmdir

创建与删除目录 一 mkdir1.mkdir 目录名2.mkdir -p 目录一/目录二 二 rmdir1.rmdir 目录名2.删除非空目录时失败3. rmkdir -p 目录1/目录2 一 mkdir mkdir是make directories的缩写&#xff0c;主要用于linux中创建目录 创建的目录不能和同级目录中已经存在的目录重名可以mkd…