ECMAScript 2020:JS 中的有符号左移和无符号右移

在 ECMAScript 2020 中,新增加了两个新的移位运算符:有符号左移(<<)和无符号右移(>>>)。这两个运算符在 JavaScript 中的使用场景相对较少,但是对于算法实现或者某些位运算场景,这两个运算符可以大大减少代码的复杂度和提高执行效率。

什么是有符号左移和无符号右移?

移位运算是指将二进制数中的所有位向左或向右移动指定的位数,根据移动方向不同,移位运算分为左移和右移。在 JavaScript 中,左移运算符用两个箭头(<<)表示,右移运算符用三个箭头(>>>)表示。

对于一个有符号整数(正数或负数),有符号左移相当于将整个数的二进制表示左移指定的位数,并在右边添加 0。例如,10 的二进制表示为 1010,将其有符号左移两位变成 101000,即将原数值的二进制表示左移两个位置,右边补 0。

对于一个无符号整数(只能为正数),无符号右移相当于将整个数的二进制表示右移指定的位数,并在左边添加 0。例如,10 的二进制表示为 1010,将其无符号右移两位变成 0010,即将原数值的二进制表示右移两个位置,左边补 0。

移位运算的使用场景

位运算

在计算机领域,二进制的位运算是一种非常常用的操作方式。而在位运算中,移位操作是其中最基本的操作之一。例如,可以通过位运算将一个十六进制颜色值转换为 RGB 值,或者实现 CRC 校验等算法。

代码优化

对于复杂的数学运算等操作,使用移位运算比使用乘除等运算可以提高代码的执行效率。移位运算可以减少浮点数的运算,加速代码的执行速度。

压缩数据

移位运算还可以用于压缩数据。例如,在压缩文件等操作中使用到的 Huffman 编码算法中就用到了移位运算来压缩数据。

如何使用移位运算符

使用移位运算符非常简单,只需要在需要进行位移的数值前添加左移(<<)或右移(>>>)运算符,并指定需要移动的位数即可。例如:

在上面的代码中,我们首先定义了一个变量 a,它的二进制表示为 1010。然后我们使用左移(<<)运算符将 a 左移两位,得到的结果为 101000,即 40。我们还使用右移(>>>)运算符将 a 右移两位,得到的结果为 10,即 2。

注意事项

使用移位运算符时需要注意以下问题:

  • 有符号左移和无符号右移只能用于整数的位运算,不能用于浮点数或者其他类型的数据。
  • 对于负数,有符号左移和右移的结果是不被定义的,应该避免使用。推荐先进行转换,再进行位移操作。
  • 移动的位数必须是一个整数,否则会抛出异常。

总结

在 ECMAScript 2020 中,新增加的有符号左移和无符号右移运算符在 JavaScript 开发中的使用场景相对较少。但是,对于算法实现或者某些位运算场景,这两个运算符可以大大减少代码的复杂度和提高执行效率。在使用时需要注意避免出现负数和使用非整数的位移数。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654775f67d4982a6eb1d3078


纠错
反馈