JS中的位运算符

位运算

将一个整数的二进制格式进行运算。

在JS中如果一个数字进行位运算,那么先将这个数字转换为整数,并且是32位整数存储格式。(与JS本身采用双精度64位存储略有不同)

NaN、Infinity、-Infinity转换为0

与运算 &

运算规则:两个整数比较,如果都为1则结果为1,否则为0。

或运算 |

运算规则:两个整数进行比较,如果有一位为1,则结果为1,否则为0。

非/否运算 ~

运算规则:将该整数的按位取反

非运算快捷方法:-(非运算的数字) - 1

~1 = -1 - 1 = 0
~2 = -2 - 1 = -3 
非运算应用-快速取整

优势:位运算的执行速度非常快

取整方法:~~数字

~~1.333 = 1
~~8.9   = 8
异或运算 ^

两个整数进行比较,相同取0,不同取0。

异或运算应用-交换变量

交换a、b

例1:只用加减
var a = 1, b = 2;
a = a + b;
b = a - b; // b = a
a = a - b; 

例2:异或运算
var a = 2, b = 3;
a = a ^ b;
b = a ^ b;
a = a ^ b;

位运算的应用-位的叠加(位的开关)

有这样一个权限对象,如下:

var power = {
    'read': 0b001,
    'write': 0b010,
    'modifiy': 0b100
}
添加权限 |

原理解释:每一个权限只占一位且唯一,做或运算就会给对应的位上赋值为1(因为该运算的特性就是有1为1)

// 001 | 010 => 011 => 3
var p = power.read | power.write; 
console.log(p) // 3
查看权限 &

原理解释:同1为1,只有对应的位上有该权限才会返回1,否则都会为0

//  011 & 001 => 001 => 1
p & power.read ? console.log('read') : console.log('no read'); // read
// 001 & 010 => 010 => 2
p & power.write ? console.log('write') : console.log('no write'); // write
// 011 & 100 => 000 => 0
p & power.modifiy ? console.log('modifiy') : console.log('no modifiy'); // no modifiy
删除权限 ^

原理解释:先加上对应的权限,在进行去除,这是为了防止之前没有这个权限,导致与运算结果错误

// 011 | 100 => 010
p = p | power.read ^ power.read;
console.log(p) // 2
右移

相当于当前数字除2 有溢出的风险

  • 无符号右移 >>
  • 有符号右移 >>
左移

相当于当前数字乘2

  • 无符号左移 <<
  • 有符号左移 <<<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值