美文网首页
Js中什么是位运算?

Js中什么是位运算?

作者: 双笙_ | 来源:发表于2021-09-26 15:46 被阅读0次

位运算一直不太懂,所以找了个时间把这个学习了,如果有写的不好请评论联系我纠正

什么是位运算?


位运算是在数字底层(即表示数字的 32 个数位)进行运算的。由于位运算是低级的运算操作,所以速度往往也是最快的(相对其它运算如加减乘除来说),并且借助位运算有时我们还能实现更简单的程序逻辑,缺点是很不直观,许多场合不能够使用

具体计算机的知识,这里我们不进行详解,只要知道一个点 位运算都是以二进制来计算的,所谓位也就是0110中的一位数字

例子:

10进制 二进制 js中显示二进制
1 0001 1
2 0010 10
5 0101 101
10 1010 1010

注: 在二进制中满 2进1,所以 2会等于 0010,js打印二进制,默认会进行去除前面补位的0,如 0001,会变成1,

正式进入正题

  1. 或运算 = a | b

对每一位进行 or 比较, a和b中同位置任意一个二进制位数为1, 既结果为1, 也就是 a | b就是1 ,你也可以理解为 ||

例子: 9 | 3 = 11

十进制 = 第四位 第三位 第二位 第一位
9 = 1 0 0 1
3 = 0 0 1 1
11 = 1 0 1 1

拿 9的第一位 '1' 和 3的第一位 '1'相比, 满足其中一个有1,所以计算拿出来的结果 第一位等于1,补零也就是: 0001,其他位相同理。

第二位 : 1 第三位: 0 第四位 :1,联合起来: 1011

用处:1取整

let a = 1.5
console.log(a | 0) // 1
//原理:  1.5 => 0001 
//         0 => 0000  
//              0001  输入就是1

  1. 与运算 = a &b

对每一位进行 AND 比较, 同位置两个二进制位数: a和b同时为1, 结果才为1, 也就是 a & b = 1 ,你也可以理解为 &&

例子: 9 & 3 = 1

十进制 = 第四位 第三位 第二位 第一位
9 = 1 0 0 1
3 = 0 0 1 1
1 = 0 0 0 1

拿 9的第一位 '1' 和 3的第一位 '1'相比, 都为1,计算结果:第一位1,补零也就是: 0001,其他位相同理。

第二位 : 0 第三位: 0 第四位 :0,联合起来: 0001

用处之一:判断奇偶

思路:奇数的二进制最后一位必然为1,所以任意一个奇数 & 1 一定等于1

const isOdd = (num)=> num & 1 === 1;
isOdd(5)
//原理:  1 => 0101 
//        0 => 0001  
//             0001  输入就是1
  1. 异或运算 = a ^ b

    什么是异或: 两个数是否有差异, 1 ^ 1 = 0 因为没有差异,

    1 ^ 0 = 1

对每一位进行 异或 比较, 同位置两个二进制位数: a和b不相等时, 结果才为1, 也就是 1 ^ 0 = 1 ,你也可以理解为 !==

例子: 9 ^ 3 = 1

十进制 = 第四位 第三位 第二位 第一位
9 = 1 0 0 1
3 = 0 0 1 1
10 = 1 0 1 0

拿 9 的第一位 '1' 和 3的第一位 '1'相比, 没有差异 1 !== 1 =false,计算结果:0, 补零也就是: 0000,其他位相同理。

第二位 : 1 第三位: 0 第四位 :1,联合起来: 1010

用处:交换两个变量(不能三个变量)

let a = 5,
    b = 6;

a = a ^ b; 
b = a ^ b;
a = a ^ b; //这里很重要最后一步还原回去原来的值
  1. 按位非 = ~ a

对每一个比特位执行非(NOT)操作。NOT a 结果为 a 的反转(即反码)

Ps: 对任一数值 x 进行按位非操作的结果为 -(x + 1)。例如,~5 结果为 -6:

例子: ~5 = - 6

应用场景:

  1. 取整
~~(-5.88) // -5
  1. 左移动操作符 <<

什么是左移操作符? 将位数向左移动 N 位,并且在右边补 N个0,被左移挤出的位数直接被丢弃

例子: 2 << 2 = 8

十进制 = 第四位 第三位 第二位 第一位
2 = 0 0 1 0
8 = 1 0 0 0

2 = 0010

8 = 1000

其实规律就是 number *= 2 ^ n

  1. 左移动操作符 >>

该操作符会将第一个操作数向右移动指定的位数。向右被移出的位被丢弃,拷贝最左侧的位以填充左侧。由于新的最左侧的位总是和以前相同,符号位没有被改变。所以被称作“符号传播”。

个人简单的理解,就是
例子: 8 >> 2 = 2

十进制 = 第四位 第三位 第二位 第一位
8 = 1 0 0 0
2 = 0 0 1 0

8 = 1000

2 = 0010

参考文章-深入研究Js的位运算及用法

相关文章

  • Js中什么是位运算?

    位运算一直不太懂,所以找了个时间把这个学习了,如果有写的不好请评论联系我纠正 什么是位运算? 位运算是在数字底层(...

  • 【转+补充】深入研究js中的位运算及用法

    转载自【博客园-不疯魔不成活】 《深入研究js中的位运算及用法》 什么是位运算? 位运算是在数字底层(即表示数字的...

  • js中的位运算

    在了解位运算之前, 必须先了解一下什么是原码, 反码和补码, 以及二进制与十进制的转换. 原码一个数在计算机中是以...

  • js位运算

    极简主义 位运算符是在数字底层(即表示数字的 32 个数位)进行操作的。 http://www.w3school....

  • 理解js中的位运算

    & 按位与&& 运算符我们都知道,只有两个都为真,结果才为真。& 道理是一样的,只有两个数的值为1时,才返回1。&...

  • js 中位运算的应用

    按位运算符有6个: 按位与 & 按位或 | 按位异或 ^ 取反 ~ 右移 >> 左移 << 应用...

  • 什么是位运算

    位运算也被称为位操作。 位操作是程序设计中对位模式或二进制数的一元和二元操作。在许多古老的微处理器上,位运算比加减...

  • 运算符

    运算符 JS中为我们定义了一套对数据进行运算的运算符。 这其中包括:算数运算符、位运算符、关系运算符等。 算数运算...

  • js基本语法

    运算符: JS中我们定义了一套对数据进行运算的运算符。 这其中包括:算数运算符,位运算符,关系运算符。 算术运算符...

  • 10_day JavaScript基本语法

    运算符: JS中我们定义了一套对数据进行运算的运算符。 这其中包括:算数运算符,位运算符,关系运算符。 算术运算符...

网友评论

      本文标题:Js中什么是位运算?

      本文链接:https://www.haomeiwen.com/subject/vwiqnltx.html