位运算符在 JS 中的妙用

猿友 2021-01-09 15:41:20 浏览数 (2588)
反馈

按位与(AND)&

将数字转换成二进制,然后进行与操作,再转换回十进制

  1. // 1 的二进制表示为 00000000 00000000 00000000 00000001
  2. // 3 的二进制表示为 00000000 00000000 00000000 00000011
  3. // --------------------------------------------------
  4. // 1 的二进制表示为 00000000 00000000 00000000 00000001
  5. console.log(1 & 3) // 1

按位或(OR)|

将数字转换为二进制,然后进行或操作,再转换回十进制

  1. // 1 的二进制表示为 00000000 00000000 00000000 00000001
  2. // 3 的二进制表示为 00000000 00000000 00000000 00000011
  3. // --------------------------------------------------
  4. // 3 的二进制表示为 00000000 00000000 00000000 00000011
  5. console.log(1 | 3) // 3

按位异或(XOR)^

将数字转换为二进制,然后进行异或操作,再转换回十进制

  1. // 1 的二进制表示为 00000000 00000000 00000000 00000001
  2. // 3 的二进制表示为 00000000 00000000 00000000 00000011
  3. // --------------------------------------------------
  4. // 2 的二进制表示为 00000000 00000000 00000000 00000010
  5. console.log(1 ^ 3) // 2

按位非(NOT)~

将数字转换为二进制,然后进行非操作,再转换回十进制,也就求二进制的反码

  1. // 1 反码二进制表示为 11111111 11111111 11111111 11111110
  2. // 由于第一位(符号位)是1,所以这个数是负数。JavaScript 内部采用补码形式表示负数,即需要将这个数减去 1,再去一次反,然后加上负号才能得到这个负数对应的十进制数值
  3. // 1 的反码减一表示为 11111111 11111111 11111111 11111101
  4. // 取反             00000000 00000000 00000000 00000010
  5. // 表示为 -2
  6. console.log(~1) // -2

左移(Left shift)<<

将数字转换成二进制,然后丢弃高位,低位补0

  1. // 1 的二进制表示为 00000000 00000000 00000000 00000001
  2. // 2 的二进制表示为 00000000 00000000 00000000 00000010
  3. console.log(1 << 1) // 2

有符号右移 >>

将数字转成二进制,然后丢弃低位,拷贝最左侧的位以填充左侧

  1. // 1 的二进制表示为 00000000 00000000 00000000 00000001
  2. // 0 的二进制表示为 00000000 00000000 00000000 00000000
  3. console.log(1 >> 1) // 0

无符号右移 >>>

将数字转成二进制,然后丢弃低位,左侧补0,因此总是非负数。

对于非负数,有符号右移和无符号右移结果总是相等。

位运算符在 JS 中的妙用

判断奇偶

  1. // 偶数 & 1 = 0
  2. // 奇数 & 1 = 1
  3. console.log(2 & 1) // 0
  4. console.log(3 & 1) // 1

取整

  1. console.log(~~6.83) // 6
  2. console.log(6.83 >> 0) // 6
  3. console.log(6.83 << 0) // 6
  4. console.log(6.83 | 0) // 6
  5. // 不可对负数取整
  6. console.log(6.83 >>> 0) // 6

交换值

  1. var a = 6
  2. var b = 8
  3. a ^= b
  4. b ^= a
  5. a ^= b
  6. console.log(a) // 8
  7. console.log(b) // 6

RGB 值和16 进制颜色值转换

  1. function hexToRGB(hex: string): string{
  2.   const hexx = hex.replace('#', '0x')
  3.   const r = hexx >> 16
  4.   const g = hexx >> 8 & 0xff
  5.   const b = hexx & 0xff
  6.   return `rgb(${r}, ${g}, ${b})`
  7. }
  8. function RGBToHex(rgb: string): string{
  9.   const rgbArr = rgb.split(/[^\d]+/)
  10.   const color = rgbArr[1] | rgbArr[2] << 8 | rgbArr[3]
  11.   return `#${color.toString(16)}`
  12. }

推荐好课:

小白学前端:JavaScript零基础入门到进阶(2020版)

JavaScript实战:动态网站开发

Javascript移动端App实战开发


0 人点赞