-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathadd.js
More file actions
72 lines (63 loc) · 1.39 KB
/
add.js
File metadata and controls
72 lines (63 loc) · 1.39 KB
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// 与门
const AND = (a, b) => {
return a && b;
}
// 或门
const OR = (a, b) => {
return a || b;
}
// 非门
const NO = (a) => {
return !a;
}
// 或非门
const NOR = (a, b) => {
return NO(OR(a, b))
}
// 与非门
const NAND = (a, b) => {
return NO(AND(a, b))
}
// 异或门
const XOR = (a, b) => {
return AND(OR(a, b), NAND(a, b))
}
/**
* 半加器
*
* @returns [加加输出, 进位输出]
*/
const HalfAdder = (a, b) => {
return [XOR(a, b), AND(a, b)]
}
/**
* 全加器
*
* @param {*} ci 进位输入
* @param {*} a 输入
* @param {*} b 输入
* @returns [加加输出, 进位输出]
*/
const FullAdder = (ci, a, b) => {
const [s1, co1] = HalfAdder(a, b);
const [s2, co2] = HalfAdder(s1, ci);
return [s2, OR(co1, co2)]
}
// 八位加法器
const EightBitAdder = (arr1, arr2) => {
const [a7, a6, a5, a4, a3, a2, a1, a0] = arr1;
const [b7, b6, b5, b4, b3, b2, b1, b0] = arr2;
const [s0, co0] = FullAdder(false, a0, b0);
const [s1, co1] = FullAdder(co0, a1, b1);
const [s2, co2] = FullAdder(co1, a2, b2);
const [s3, co3] = FullAdder(co2, a3, b3);
const [s4, co4] = FullAdder(co3, a4, b4);
const [s5, co5] = FullAdder(co4, a5, b5);
const [s6, co6] = FullAdder(co5, a6, b6);
const [s7, co7] = FullAdder(co6, a7, b7);
return [+co7, +s7, +s6, +s5, +s4, +s3, +s2, +s1, +s0]
}
console.log(EightBitAdder(
[0, 1, 1, 0, 0, 1, 0, 1],
[1, 0, 1, 1, 0, 1, 1, 0],
));