Binary arithmetic

From CPUdev wiki
Revision as of 13:32, 18 February 2023 by Demindiro (talk | contribs) (First draft. Written under the assumption that readers are not familiar with binary arithmetic yet, so heavy on examples.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

As the name digital implies, digital computers work on on bits with a value of either 0 or 1. Accordingly, all operations, including arithmetic, operate on 0 or 1 values.

Numbers that consists only of 0 or 1s are called binary or base2 numbers. Binary numbers are often suffixed with a subscript 2, for example 10110112.

Converting between decimal and binary

Decimal as a sum of powers of 10

Any decimal number can be written as a sum of power of 10s. For example:

  • 42 = 4*101 + 4*100
  • 57005 = 5*104 + 7*103 + 0*102 + 0*101 + 5*100
  • 48.879 = 4*101 + 8*100 + 8*10-1 + 7*10-2 + 9*10-3

Binary numbers can be written in the same way though with powers of 2 instead of 10.

Converting from binary to decimal

  • 10102 = 1*23 + 0*22 + 1*21 + 0*20 = 8 + 2 = 10
  • 100.012 = 22 + 2-2 = 4 + 1/4 = 4.25

Converting from decimal to binary

  1. Divide the decimal number by 2.
  2. Append the remainder to the left of the binary number.
  3. Repeat with quotient as dividend until it is 0.

For example:

  • 29 = 111012
    • 29 / 2 = 14, remainder 1
    • 14 / 2 = 7, remainder 0
    • 7 / 2 = 3, remainder 1
    • 3 / 2 = 1, remainder 1
    • 1 / 2 = 0, remainder 1

The same technique can be used for rational numbers.

  1. First multiply by some power of 2 to convert it to an integer.
  2. Apply above procedure.
  3. Divide by the same power of 2 to get the correct result.

Mathematical operations

The same techniques used for addition, multiplication ... used for decimal numbers can also be used for binary numbers.

Addition & subtraction

  22       101102
+ 19     + 100112
----     --------
  41      1010012

Multiplication

  12         11002
*  5       *  1012
----       -------
  10         11002
+ 50            02
----     + 1100002
  60     ---------
            1111002

Division

  372 | 5        101110100 | 1012
- 35  +----    - 101       +---------
----  | 74     -----       | 10010102
   22 |            01      |
 - 20 |         -   0      |
 ---- |         -----      |
    2 |             11     |
                 -   0     |
                 -----     |
                    110    |
                  - 101    |
                  -----    |
                      11   |
                   -   0   |
                   -----   |
                      110  |
                    - 101  |
                    -----  |
                        10 |
                     -   0 |
                     ----- |
                        10 |