在前端开发中,位运算符在日常开发中不常用,但在某些情况下,合理运用位运算符能够提升代码的性能和可读性。本文将介绍在 TypeScript 中使用位运算符的小技巧,包含同步异步代码以及实用案例。
位运算符
位运算符是一种对二进制整数进行操作的运算符,操作具体取决于运算符的种类。JavaScript 语言支持七种位运算符:
&
按位与|
按位或^
按位异或~
按位非<<
左移运算符>>
右移运算符,也叫带符号的右移>>>
右移运算符,也叫无符号右移
下面我们将介绍实际应用中比较常见的位运算。
应用场景
清除一个数的二进制尾部
有时候我们需要清除一个数字的二进制尾部为零的部分,比如:
const num = 1024; // 10000000000 const cleared = num & -num; // 00000000010 console.log(cleared); // 2
上面的代码中,-num
会求出 num
的二进制的反码再加一的结果,得到的数二进制位上只有一个 1
。num & -num
会保留 num
的二进制位上最后一个 1
所代表的数值,也就是清除 num
的二进制尾部为零的部分。
计算一个数在二进制下的位数
有时候我们需要计算一个数在二进制下的位数,比如:
const num = 1024; // 10000000000 const bitCount = (num.toString(2)).length; console.log(bitCount); // 11
上面的代码中,num.toString(2)
将 num
转换为二进制字符串,length
属性就是这个字符串的长度,就是 num
在二进制下的位数。
判断一个数是否是 2 的次幂
有时候我们需要判断一个数是否是 2 的次幂,比如:
const num = 1024; // 10000000000 const isPowerOfTwo = (num & (num - 1)) === 0; console.log(isPowerOfTwo); // true
上面的代码中,num & (num - 1)
的结果会清除 num
的二进制位上最后一个 1
,如果结果是 0
,说明 num
是 2 的次幂。
快速交换两个变量的值
有时候我们需要快速交换两个变量的值,比如:
let a = 1, b = 2; a ^= b; b ^= a; a ^= b; console.log(a, b); // 2, 1
上面的代码中,a ^= b
相当于 a = a ^ b
,也就是将 a
和 b
的二进制进行异或运算,得到的结果赋值给 a
。因为异或运算有交换律和结合律,所以可以通过异或运算快速交换两个变量的值。
总结
本文介绍了在 TypeScript 中使用位运算符的小技巧,包含了四个实用的案例,覆盖了位运算符在实际应用中的一些场景,能够有效提升开发效率、提高代码可读性,为开发者提供更好的开发体验。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646b22f0968c7c53b0a8f650