-
Notifications
You must be signed in to change notification settings - Fork 0
/
section-1.swift
62 lines (51 loc) · 1.44 KB
/
section-1.swift
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
let multiplicand = [0, 0, 1, 1]
let multiplier = [1, 0, 0, 1]
func binaryToString(binary: [Int]) -> String {
var out = ""
for bit in binary {
out.extend(bit == 1 ? "1 " : "0 ")
}
return out
}
func binaryAdd(binaryA: [Int], plus binaryB: [Int]) -> [Int] {
var result = [Int](count: 4, repeatedValue: 0)
var carry = 0
for(var i = 3; i >= 0; i--) {
result[i] = binaryA[i] + binaryB[i] + carry;
switch result[i] {
case 0, 1:
carry = 0
case 2:
carry = 1
result[i] = 0
case 3:
carry = 1
result[i] = 1
default: continue
}
}
return result
}
func twosComplement(binary: [Int]) -> [Int] {
var result = [Int](count: 4, repeatedValue: 0)
for i in 0..<4 {
result[i] = binary[i] == 0 ? 1 : 0
}
result = binaryAdd(result, plus: [0, 0, 0, 1])
return result
}
func binarySub(binaryA: [Int], minus binaryB: [Int]) -> [Int] {
var result = [Int](count: 4, repeatedValue: 0)
result = binaryAdd(binaryA, plus: twosComplement(binaryB))
return result
}
//to be implemented
class Register {
var bits = [Int]()
}
// tests of functions
binaryToString(multiplier)
binaryToString(binaryAdd(multiplier, plus: multiplicand))
binaryToString(twosComplement(multiplier))
binaryToString(binarySub(multiplier, minus: multiplicand))
binaryToString(binarySub(multiplicand, minus: multiplier))