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

  • 无符号左移 <<
  • 有符号左移 <<<

你可能感兴趣的:(JavaScript)