mirror of
https://github.com/trekhleb/javascript-algorithms.git
synced 2026-03-13 08:51:02 +08:00
Add Full Adder algorithm (math/bits) (#334)
* Add Full Adder algorithm (math/bits) * Full adder: minor spelling fixes * Full adder: even better comments
This commit is contained in:
committed by
Oleksii Trekhleb
parent
339ae02977
commit
97e4f5fe2a
@@ -226,6 +226,42 @@ Number: 9 = (10 - 1) = 0b01001
|
||||
|
||||
> See [isPowerOfTwo.js](isPowerOfTwo.js) for further details.
|
||||
|
||||
|
||||
#### Full Adder
|
||||
|
||||
This method adds up two integer numbers using bitwise operators.
|
||||
|
||||
It implements [full adder](https://en.wikipedia.org/wiki/Adder_(electronics))
|
||||
electronics circut logic to sum two 32-bit integers in two's complement format.
|
||||
It's using the boolean logic to cover all possible cases of adding two input bits:
|
||||
with and without a "carry bit" from adding the previous less-significant stage.
|
||||
|
||||
Legend:
|
||||
- `A`: Number `A`
|
||||
- `B`: Number `B`
|
||||
- `ai`: ith bit of number `A`
|
||||
- `bi`: ith bit of number `B`
|
||||
- `carryIn`: a bit carried in from the previous less-significant stage
|
||||
- `carryOut`: a bit to carry to the next most-significant stage
|
||||
- `bitSum`: The sum of `ai`, `bi`, and `carryIn`
|
||||
- `resultBin`: The full result of adding current stage with all less-significant stages (in binary)
|
||||
- `resultBin`: The full result of adding current stage with all less-significant stages (in decimal)
|
||||
```
|
||||
A = 3: 011
|
||||
B = 6: 110
|
||||
┌──────┬────┬────┬─────────┬──────────┬─────────┬───────────┬───────────┐
|
||||
│ bit │ ai │ bi │ carryIn │ carryOut │ bitSum │ resultBin │ resultDec │
|
||||
├──────┼────┼────┼─────────┼──────────┼─────────┼───────────┼───────────┤
|
||||
│ 0 │ 1 │ 0 │ 0 │ 0 │ 1 │ 1 │ 1 │
|
||||
│ 1 │ 1 │ 1 │ 0 │ 1 │ 0 │ 01 │ 1 │
|
||||
│ 2 │ 0 │ 1 │ 1 │ 1 │ 0 │ 001 │ 1 │
|
||||
│ 3 │ 0 │ 0 │ 1 │ 0 │ 1 │ 1001 │ 9 │
|
||||
└──────┴────┴────┴─────────┴──────────┴─────────┴───────────┴───────────┘
|
||||
```
|
||||
|
||||
> See [fullAdder.js](fullAdder.js) for further details.
|
||||
> See [Full Adder on YouTube](https://www.youtube.com/watch?v=wvJc9CZcvBc).
|
||||
|
||||
## References
|
||||
|
||||
- [Bit Manipulation on YouTube](https://www.youtube.com/watch?v=NLKQEOgBAnw&t=0s&index=28&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8)
|
||||
|
||||
Reference in New Issue
Block a user