Binary Number Representation and Binary Math
By Stephen Bucaro
Digital computers perform all of their amazing work with only two voltage levels.
One of those voltages is 0 volts. The other voltage can be anything from 2.5 volts
or lower, up to 5 volts, as long as it's not 0 volts. A computer interprets 0 volts as "0",
and the other voltage as "1".
Humans use a decimal based number system. The decimal numbering system uses
the ten characters 0,1,2,3,4,5,6,7,8, and 9 to represent numbers. That's why decimal
numbers are sometimes called base-10 numbers.
The binary system used by computers has only two characters; 0 and 1. The binary
numbers are base-2 numbers. You would think that would make computers very limited,
but their amazing speed more than compensates for the limited number of characters
in their number system.
The decimal system is a positional system. That means the actual value of a digit
depends on its position in a number. For example in the number 10, the 1 represents
ten units, while in the number 100, the 1 represents one hundred units. To interpret a number
you add together the values of all the digits in their positions in the number. For example
110 equals one hundred and ten units.
The binary system is also a positional system. The binary number 10 equals a value
of 2 in the decimal system. The binary number 100 equals decimal system 4. Similar to
the decimal system, to interpret a number you add together the values the digits in their
positions. For example the binary number 110 equals decimal system 6.
You might think it's very difficult to convert binary to decimal but all you have to do
is think in powers of 2. Lets think about binary numbers with 4 characters. Going from
right to left the powers of 3 would be valued at decimal 1, 2, 4, and 8. It's actually
easier to think from left to right, so the positions would be valued at 8,4,2,1.
So a the binary number 1010 equals 8+2 or decimal 10. The binary number 0110
equals 4+2 or decimal 6. The binary number 1101 equals 8+4+1 or decimal 13.
Representing Negative Binary Numbers
If a processor has 8 bit registers, the largest binary number it can store is 11111111
(255 decimal). If we want to use 8 bit registers to represent signed numbers, we can
allocate one of the register's cells to represent the number's sign. Conventionally the
left-most cell is reserved for the sign bit. A value of 0 in the sign bit cell indicates that
the register contains a positive number. A value of 1 in the sign bit cell indicates that
the register contains a negative number.
Giving up a register cell, leaving only seven bits to represent a number, allows a
register to hold positive numbers up to only 1111111 (127 decimal). However it allows
us to also represent negative numbers down to -128.
Adding Binary Numbers
Adding binary numbers is easy if you remember that 1 + 1 = 0 with a carry of 1.
If you're adding 1 + 1 + (a carry of 1), the sum is 1 with a carry of 1, in other words
1 + 1 + 1 = 1 with a carry of 1. Some examples are shown below.
These examples might be stored in a seven-bit registers. In the last example, a
carry bit from the most significant bits goes beyond the seven bits that the register
can hold. This carry bit would become an "overflow" bit and would be stored in a special
"status" register that, when checked by the software would cause an "exception" that
might cause the the results to go to a different format.