# 什么是二进制?

十进制计数是使用 10作为基数, 二进制计数是使用 2作为基数, 二进制的数位就是 2^n的形式。

# 为什么使用二进制?

二进制的数据表达具有抗干扰能力强、可靠性高的优点; 二进制非常适合做逻辑运算。

# 位运算

移位操作

  • 左移
value << 1 = Math.floor(value * 2)

value << n = Math.floor(value * 2 ^ n)
1
2
3
  • 右移
value >> 1 = Math.floor(value / 2)

value >> n = Math.floor(value / 2 ^ n)
1
2
3

逻辑操作

  • &

00

  • |

11

  • ~

0 -> 1, 1 -> 0

  • 异或 ^

同为 0, 异为 1

# 实现代码

/*
 * @Author: Rainy
 * @Date: 2019-11-14 19:25:01
 * @LastEditors: Rainy
 * @LastEditTime: 2019-11-28 18:46:02
 */
export function bitLeftShift(val: number, bit: number): number {
  return val << bit;
}

export function bitRightShift(val: number, bit: number): number {
  return val >> bit;
}

export function bitAnd(left: number, right: number): number {
  return left & right;
}

export function bitOr(left: number, right: number): number {
  return left | right;
}

export function bitNot(val: number): number {
  return ~val;
}

export function bitXOR(left: number, right: number): number {
  return left ^ right;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30