按位操作符


按位操作符(Bitwise operators) 将其操作数(operands)当作 32 位的比特序列(由0和1组成),但是返回值依然是标准的 JavaScript 数值。

所有的按位操作符的操作数都会被转成有符号32位整数
// ~~ 去掉小数

补码形式(two's complement)是指一个数的负对应值(negative counterpart)(如 5和-5)为数值的所有比特位反转后,再加1。反转比特位即该数值进行‘非’位运算,也即该数值的反码。补码保证了当一个数是正数时,其最左的比特位是0,当一个数是负数时,其最左的比特位是1。因此,最左边的比特位被称为符号位sign bit)。
补码的设计目的是:
⑴ 使符号位能与有效值部分一起参加运算,从而简化运算规则.
⑵ 使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计


与,或,非,异或(不同为真) : & | ~ ^
<< 左移: 该操作符会将第一个操作数向左移动指定的位数。向左被移出的位被丢弃,右侧用 0 补充。

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

>>> 无符号右移:该操作符会将第一个操作数向右移动指定的位数。向右被移出的位被丢弃,左侧用0填充。因为符号位变成了 0,所以结果总是非负的。(译注:即便右移 0 个比特,结果也是非负的。