# 什么是二进制?
十进制计数是使用 10
作为基数, 二进制计数是使用 2
作为基数, 二进制的数位就是 2^n
的形式。
# 为什么使用二进制?
二进制的数据表达具有抗干扰能力强、可靠性高的优点; 二进制非常适合做逻辑运算。
# 位运算
移位操作
- 左移
value << 1 = Math.floor(value * 2)
value << n = Math.floor(value * 2 ^ n)
1
2
3
2
3
- 右移
value >> 1 = Math.floor(value / 2)
value >> n = Math.floor(value / 2 ^ n)
1
2
3
2
3
逻辑操作
- 与
&
见 0
出 0
- 或
|
见 1
出 1
- 非
~
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
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