在 ES6 中,我们已经可以使用二进制操作符(&、|、^、<del>)进行位运算,但这些运算符有一个局限性,就是只能对数字类型进行操作。而 ES7 提供了一种新的运算符,即二进制链式操作符(&、|、^、</del>),可以更好地支持大型二进制数据操作,例如像视频编码和解码等。
二进制操作符的基础概念
在介绍二进制链式操作符之前,我们先来了解一下二进制操作符的基本概念。
二进制与十进制互相转换
在计算机中,所有的数据都是以二进制的形式存储的。与十进制不同,二进制只有两个数码:0 和 1。
将一个十进制数转换成二进制数,可以通过除以 2 取余数的方法来实现。例如,将十进制数 11 转换成二进制数,过程如下:
- 11 ÷ 2 = 5 ... 1
- 5 ÷ 2 = 2 ... 1
- 2 ÷ 2 = 1 ... 0
- 1 ÷ 2 = 0 ... 1
所以,11 的二进制形式为 1011。
将一个二进制数转换成十进制数,可以通过将二进制中的每一位按照权重相加的方法来实现。例如,将二进制数 1011 转换成十进制数,过程如下:
- 1 x 2^3 + 0 x 2^2 + 1 x 2^1 + 1 x 2^0 = 8 + 0 + 2 + 1 = 11
二进制操作符
二进制操作符是用来操作二进制数的特殊运算符。在 JavaScript 中,二进制操作符有以下几种:
- 按位与(&):返回两个数都是 1 的位。
- 按位或(|):返回两个数中有一个是 1 的位。
- 按位异或(^):返回两个数不相同的位。
- 按位非(~):返回数值的反码,即把所有的 0 换成 1,1 换成 0。
ES7 新增的二进制链式操作符
ES7 新增的二进制链式操作符(&、|、^)允许这些方法链式应用,并且允许不同于数字的数据类型应用它们。
语法
二进制链式操作符的语法如下:
x & y x | y x ^ y
其中:
- x 和 y 可以是任何数据类型。
- 以上三个操作符返回的结果类型与 x 类型相同。
示例
下面我们来看一些二进制链式操作符的示例。
对数字类型进行二进制操作
let a = 0b1010 let b = 0b1100 console.log(a & b) // 0b1000 console.log(a | b) // 0b1110 console.log(a ^ b) // 0b0110 console.log(~a) // -0b1011(因为反码的符号位是负数)
对字符串类型进行二进制操作
-- -------------------- ---- ------- --- ---- - ------- --- ---- - ------- --- ------ - -- --- ---- - - -- - - ------------ ---- - ------ -- ------------------- - ------------------------------- - ------------------- -- ------------------------
对数组类型进行二进制操作
let arr1 = [0b1010, 0b0011] let arr2 = [0b1100, 0b0001] let result = arr1.map((value, index) => value ^ arr2[index]) console.log(result) // [ 8, 2 ]
总结
二进制链式操作符是 ES7 新增的一种运算符,允许进行不同于数字类型的二进制数据操作,例如字符串和数组。本文中,我们介绍了二进制与十进制互相转换的基本方法,并且给出了一些二进制链式操作符的使用示例。在开发中,我们可以根据实际需求,利用这些操作符来进行更加高效、便捷的二进制数据操作。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/651ce29795b1f8cacd464410