js 位运算你了解吗?

3 篇文章 0 订阅

名词介绍

有符号: 无符号表示全部的整数,包含负数和正数
无符号: 有符号代表全部是正整数,不包含负数的整数

源码: 计算机存储数字都是以二进制进行存储,并且第一位 数字为 0 表示正数, 1表示负数,所以二进制称为源码, 比如 2 的二进制 0000 0010
反码: 对所有二进制进行取反操作, 1 变成 00变成 1, 当前数字为负数时,第一位数字不变(代表正负数), 比如 2 的反码 0111 1101-2 的反码 1111 1101
补码: 所有负数都是以补码进行存储,补码表现形式为 先求出反码, 接着+ 1 ,比如 -2 的源码为 1000 0010, 反码为 1111 1101, 补码为 1111 1110

符号介绍

1.按位与(&)

参数1参数2结果
111
100
010
000
参数1参数2结果
000100010001
110011011100

使用场景 (平时在判断奇偶数的情况下使用):

 (4 & 1)  === 0   // true  偶数
 (5 & 1) === 0  //  false 奇数
 (15 & 1) === 0 // false 奇数

2.按位或(|)

参数1参数2结果
111
101
011
000
参数1参数2结果
000100010001
110011011101

使用场景 (向下取整, 相当于Math.floor):

 1.4 | 0  = 1
 1.8 | 0 = 1
 4.2 | 0 = 4

3.按位异或 (^)

参数1参数2结果
110
101
011
000
参数1参数2结果
000100010000
110011010001

使用场景 (交换两个数):

// 原始解法,使用额外空间
let a = 2;
let b = 3;
let temp = a;
a = b;
b = temp;
// 使用按位异或 (^) 解决
 let a = 2;
 let b = 3;
 a = a ^ b;
 b = a ^ b;
 a = a ^ b;

// 是不是有点懵了,原理如下,需要细品

// 如果
a ^ b = c
// 那么
c ^ b = a
c ^ a = b

注意:异或运算支持运算的交换律和结合律

4.左移(<<)

2 << 2 = 6;

图解:
0000 0000 0000 0010
--------------------
0000 0000 0000 1000

5.有符号右移(>>)

-4 >> 1 = -2;

图解:
1000 0000 0000 0100
--------------------
1000 0000 0000 0010

6.无符号右移 (>>>)

2 >>> 1 = 1;

图解:
0000 0000 0000 0010
--------------------
0000 0000 0000 0001
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜丶陌颜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值