首页IT科技js位运算有什么用(JS中的位运算)

js位运算有什么用(JS中的位运算)

时间2025-05-04 00:05:07分类IT科技浏览3643
导读:目录...

目录

JS中的位运算

JS中的与运算

JS中的或运算

JS中的否(非)运算

计算机中负数的存储方式

JS中的异或运算

JS中位运算的应用场景

位的叠加(开关)

JS中的位移运算

左位移

右位移

全右位移

首先了解一下什么是位运算

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

上面的话可以简化为:将一个整数的二进制格式进行运算

那么在JS中是如何进行位运算的呢?

JS中的位运算

在JS中      ,如果需要对一个数据      ,类似于加减乘除                   ,它会首先将其转换为一个整数             ,并且按照32位的整数二进制排列

举个例子:小数2.3

2.3 -> 2 -> 0000 0000 0000 0000 0000 0010 //第一个0表示符号位      ,1为负数                  ,0为正数

首先把2.3四舍五入成一个整数2             ,然后将这个整数转换成32位二进制整数格式,所以对于JS中的位运算                  ,需要全部转换成整数格式                   ,在进行运算

那么对于一些特殊的数字,比如NaN                   、infinity      、-infinity是怎么表示的呢

在JS中规定      。对于特殊的以上数字            ,如果进行位运算                   ,全部看作0

JS中的与运算

在js中位运算有多种      ,先介绍第一种与运算            ,符号为:&                   ,写法为:表达式1 & 表达式2

那么与运算是怎么计算的呢?

与运算:参加运算的两个数据      ,按二进制位进行“与            ”运算

上面的话通俗来讲:两位同时为“1                   ”      ,结果才为“1      ”                   ,否则为0             ,就是将两个整数的每一个二进制位进行比较      ,如果都为1                  ,结果才为1             ,其余情况全部为0;

举个例子 : 1 & 2

1 & 2 1 对应的二进制是--0000 0000 0000 0000 0000 0000 0000 0001 2 对应的二进制是--0000 0000 0000 0000 0000 0000 0000 0010 由于前28位都为0,结果与运算后肯定也全为0                  ,这时就算后四位 - 0 0 0 1 - - 0 0 1 0 - ----------- - 0 0 0 0 - //结果为0000                   ,转换为十进制为0,那么1 & 2的结果就为0

JS中的或运算

在js中的第二种位运算是或运算            ,符号 |                    ,写法:表达式1 | 表达式2

那么或运算是如何计算的呢?

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

举个例子 : 1 | 3

1 | 3 1 对应的二进制是--0000 0000 0000 0000 0000 0000 0000 0001 3 对应的二进制是--0000 0000 0000 0000 0000 0000 0000 0011 由于前30位全为0      ,与运算后也全为0                   ,可以不计入计算 - 0 1 - - 1 1 - ------- - 1 1 - //二进制11             ,需要补齐32位才可以转换为十进制      ,那么1 | 3的结果就为3

JS中的否(非)运算

在js中                  ,还有一中运算             ,称为否或者非运算,符号为:~                  ,写法:~表达式

否运算:将这个整数全部二进制位按位取反                   ,0变成1,1变成0

在这里首先带大家了解一下知识

计算机中负数的存储方式

可能某些同学认识二进制会认为负数-1在计算机是这样存储的

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

感觉上-1好像是这样存储的      ,但其实计算机并不是这样存储的            ,这样的表示方法叫做真码                   ,对于人来说      ,这样确实很任意让人阅读      ,对于为什么计算机会这样存储                   ,这与计算机组成原理有关             ,计算机是不能做减法的      ,只能做加法的                  ,这里并不多讲

那么计算机到底是如何存储负数的呢?

首先计算机拿出负数的真码             ,符号位不动,其余位全部取反                  ,取反的叫反码                   ,然后将反码加上1就可以得到负数的补码,在计算机中负数就是存储的补码

如果还不懂的话            ,请看我举个例子:如   -1

-1 拿出真码 --> 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 ~1 对1的二进制序列进行取反 --> 1111 1111 1111 1111 1111 1111 1111 1110 这是得到的是存储在计算机中的补码      ,需要转换成真码                   ,然后才能传换成十进制 > 取出补码 --> 1111 1111 1111 1111 1111 1111 1111 1110 > 得到反码 --> 1111 1111 1111 1111 1111 1111 1111 1101 //补码-1就得到反码 > 得到真码 --> 1000 0000 0000 0000 0000 0000 0000 0010 //符号位不变             ,其余全部取反      ,得到真码 > 转换成十进制 ----得到-2 --所以 ~1 的结果为 -2

以上方法确实可以得出非运算结果                  ,但看起来繁琐复杂             ,这里小编给大家介绍一个简单的使用方法,面试笔试                  ,考试快速得出结果

~x:-x - 1    // 取反某个数字                   ,先让这个数字变成负数,然后减去1            ,就得到非运算结果

举个例子  ~2和~-2

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

以上方法                   ,非常好用

顺便给大家介绍一种JS中最快速取整的方式      ,就是小数取整数            ,符号:~~                   ,写法:~~小数

举个例子 

~~3.1415926 > 首先对3.1415926进行非运算 --> ~3.1415926 -->取出整数部分3      ,结果为-4 > 然后再对-4进行非运算 --> ~-4 --> 结果为3

但小编并不介意使用这种方法      ,不太容易阅读                   ,可以拿来炫炫技巧

JS中的异或运算

再给大家介绍一种位运算:异或运算             ,符号:^       ,写法:数字1 ^ 数字2

异或运算:将数字1和数字2按32位二进制进行比较                  ,不同为1             ,相同为0

举个例子  1 ^ 2

1 ^ 2 1 对应的二进制是 --> 0000 0000 0000 0000 0000 0000 0000 0001 2 对应的二进制是 --> 0000 0000 0000 0000 0000 0000 0000 0010 由于前30位相比较全部为0,这里就比较后两位 -- 0 1 -- -- 1 0 -- --------- -- 1 1 -- // 二进制补齐32位                  ,转换成十进制后                   ,结果为3

炫技的时刻又到啦!!!

如果面试官问你交换变量的方法,你能写出来几种

小编给大家带来下面几种方法

let a = 1,b = 2; //方式一 let temp = a; a = b; b = temp; console.log(a,b) //输出2 1 //方式二 a = a + b; b = a - b; a = a - b; console.log(a,b) //输出2 1 //方式三 a = a ^ b; b = a ^ b; a = a ^ b; console.log(a,b) //输出2 1

介绍完JS中的位运算            ,相信大家都不陌生了                   ,那么位运算到底应用于JS中的那些场景呢?

JS中位运算的应用场景

这里小编给带来      ,js中位运算的常见场景

位的叠加(开关)

举个例子

//管理所有权限 let AllPermission = { read:0b001, //读权限 write:0b010, //修改权限 create:0b100, //创建权限 } //权限1表示可读可写 let permission1 = AllPermission.read | AllPermission.write //判断权限:权限1中是否有可读权限 permission1 & AllPermission === AllPermission ? console.log("可读") : console.log("不可读") //输出可读

JS中的位移运算

接下来给大家介绍一下js中的位移运算            ,包含左位移和右位移

左位移

符号:<<

写法:数字1  <<  数字2

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

举个例子:  3  <<  1

3 << 1 3 对应的二进制是 --> 0000 0000 0000 0000 0000 0000 0000 0011 左移一位后是 --> 0000 0000 0000 0000 0000 0000 0000 0110 左移运算      ,是整个32位向左移动      ,最后移动多少位                   ,后面补多少0 所以3 << 1 的结果为 0110             ,转换为十进制为6

 由上面可以得出左移运算的规律:数字1 乘以 2的数字2次方

3 << 1 = 3 * 2 ^ 1 = 6

右位移

符号: >> 

写法:数字1  >> 数字2

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

注意!!!!!------->右位移有可能会丢失精度                  ,请谨慎使用

举个例子   3 >> 1

3 >> 1 3 对应的二进制是 --> 0000 0000 0000 0000 0000 0000 0000 0011 右移一位后是 --> 0000 0000 0000 0000 0000 0000 0000 0001 右移运算             ,是整个32位向右移动,最后移动多少位                  ,符号位不变                   ,前面补多少0 所以3 >> 1 的结果为 0001 ,转换为十进制为1

求右位移的快速方法:

举个例子  5 >> 1

相当于 5 / 2^1             ,然后取整数部分                   ,结果为2

全右位移

符号:>>>

写法:同右位移

全右位移:同右位移      ,区别在于            ,符号位会跟着移动

举个例子  -1 >>> 1

-1 >>> 1 -1 对应的二进制是 --> 1111 1111 1111 1111 1111 1111 1111 1110 全右移后是 --> 0111 1111 1111 1111 1111 1111 1111 1111 所以-1 >>> 1 的结果为 0111 1111 1111 1111 1111 1111 1111 1111                    ,转换为十进制为2147483647

好啦      ,今天的JS位运算已经全部介绍完毕      ,你学会了吗

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
搭建yolov4目标检测平台(手把手教你搭建属于自己的PyQt5-YOLOv5目标检测平台(保姆级教程)) 网站收录技巧(新网站seo怎么收录)