Mod 1
Mod 1
Ask most people what the most commonly used number system is, and they would probably
reply (after a bit of thought), the decimal system. But actually many number systems, and
counting systems are used, without the users thinking much about it. For example clocks and
compasses use the ancient Babylonian number system based on 60 rather than the decimal
system based on 10. Why? Because 60 is easier to divide into equal segments, it can be evenly
divided by 1,2,3,4,5,6,10,12,15, 20 and 30. This is much better for applications such as time, or
degrees of angle than a base of 10, which can only be divided into equal parts by 1, 2 and 5.
Many counting systems are ancient in origin and are still in use because they are useful for
particular purposes.
Using the decimal system it is easy to count up to ten fingers, using just the fingers on two
hands. In northern Britain farmers, for centuries, used an ancient Celtic counting system, based
on 20 (also called a score), to count their animals, and its use still persisted even into the second
half of the twentieth century.
The binary system, based on 2, is just another special number system, and is used by digital
electronic devices because digital circuits work on an electrical ‘on or off’ two state system, a
number system based on 2 is therefore much easier for electronic devices to use. However binary
is not a natural choice for human counting or calculation.
Number Systems
Most number systems follow a common pattern for writing down the value of a number:
A fixed number of values can be written with a single numerical character, then a new column is
used to count how many times the highest value in the counting system has been reached. The
number of numerical values the system uses is called the base of the system. For example, the
decimal system has 10 numerical characters and so has a base of 10:
0123456789
For writing numbers greater than 9 a second column is added to the left, and this column has 10
times the value of the column immediately to its right.
Because number systems commonly used in digital electronics have different base values to the
decimal system, they look less familiar, but work in essentially the same way.
Decimal, (base 10)
Decimal has ten values 0 to 9. If larger values than 9 are needed, extra columns are added to the
left. Each column value is ten times the value of the column to its right. For example the decimal
value twenty-two is written 22 (2 tens + 2 ones).
Binary, (base 2)
Binary has only two values 0 and 1. If larger values than 1 are needed, extra columns are added
to the left. Each column value is now twice the value of the column to its right. For example the
decimal value three is written 11 in binary (1 two + 1 one).
Octal, (base 8)
Octal has eight values 0 to 7. If larger values than 7 are needed, extra columns are added to the
left. Each column value is now 8 times the value of the column to its right. For example the
decimal value twenty-seven is written 33 in octal (3 eights + 3 ones).
Hexadecimal has sixteen values 0 to 15, but to keep all these values in a single column, the 16
values (0 to 15) are written as 0 to F, using the letters A to F to represent numbers 10 to 15, so
avoiding the use of a second column. Again, if higher values than 15 (F in hexadecimal) are
needed, extra columns to the left are used. Each column value is sixteen times that of the column
to its right. For example the decimal value sixty-eight is written as 44 in hexadecimal (4 sixteens
+ 4 ones).
Each of these different number systems works in the same way, it is just that each system has a
different base, and the column values in each system increase by multiples of the base number as
columns are added to the left.
Because this module describes several different number systems, it is important to know which
system is being described. Therefore if there is some doubt which system a number is in, the
base of the system, written as a subscript immediately after the value, is used to identify the
number system.
For example:
The range of number values in different number systems is shown in Table 1.1.2, Notice that
because the hexadecimal system must express 16 values using only one column, it uses the
letters A B C D E & F to represent the numbers 10 to 15.
The Radix Point.
When writing a number, the digits used give its value, but the number is ‘scaled’ by its RADIX
POINT.
For example, 456.210 is ten times bigger than 45.6210 although the digits are the same.
Notice also that when using multiple number systems, the term ‘RADIX point’ instead of
‘DECIMAL point’ is used. When using decimal numbers, a decimal point is used, but if a
different system is used, it would be wrong to call the point a decimal point, it would need to be
called "Binary point" or "Octal point" etc. The simplest way around this is to refer to the point in
any system (which will of course have its value labelled with its radix) as the RADIX POINT.
Exponents
A decimal number such as 456.210 can be considered as the sum of the values of its individual
digits, where each digit has a value dependent on its position within the number (the value of the
column):
= 456.210
Each digit in the number is multiplied by the system radix raised to a power depending on its
position relative to the radix point. This is called the EXPONENT. The digit immediately to the
left of the radix point has the exponent 0 applied to its radix, and for each place to the left, the
exponent increases by one. The first place to the right of the radix point has the exponent -1 and
so on, positive exponents to the left of the radix point and negative exponents to the right.
This method of writing numbers is widely used in electronics with decimal numbers, but can be
used with any number system. Only the radix is different.
The radix point is moved one place to the left by increasing the exponent by one.
It is also possible to move the radix point to the right by decreasing the exponent. In this way the
radix point can be positioned wherever it is required, in any number system, simply by changing
the exponent. This is called FLOATING POINT NOTATION and it is how calculators handle
decimal points in calculations.
Normalised Form
By putting the radix point at the front of the number, and keeping it there by changing the
exponent, calculations become easier to do electronically, in any radix.
In electronics systems a single binary digit is called a bit (short for Binary DigIT), but as using a
single digit would seriously limit the maths that could be performed, binary bits are normally
used in groups.
4 bits = 1 nibble
8 bits = 1 byte
Multiple bytes, such as 16 bits, 32 bits, 64 bits are usually called ‘words’, e.g. a 32 bit word. The
length of the word depends on how many bits can be physically handled or stored by the system
at one time.
When a number is stored in an electronic system, it is stored in a memory location having a fixed
number of binary bits. Some of these memory locations are used for general storage whilst
others, having some special function, are called registers. Wherever a number is stored, it will be
held in some form of binary, and must always have a set number of bits. Therefore a decimal
number such as 13, which can be expressed in four binary bits as 11012 becomes 000011012
when stored in an eight-bit register. This is achieved by adding four NON SIGNIFICANT
ZEROS to the left of the most significant ‘1’ digit.
Using this system, a binary register that is n bits wide can hold 2n values.
Summary:
• Electronic systems may use a variety of different number systems, (e.g. Decimal, Hexadecimal,
Octal, Binary).
• The number system in use can be identified by its radix (10, 16, 8, 2).
• The individual digits of a number are scaled by the Radix Point.
• The Exponent is the system radix raised to a power dependent on the column value of a
particular digit in the number.
• In Floating Point Notation the Radix Point can be moved to a new position without changing
the value of the number if the Exponent of the number is also changed.
• In Normalised Form the radix point is always placed to the left of the most significant digit.
• When numbers are stored electronically they are stored in a register holding a finite number
of digits; if the number stored has less digits than the register, non-significant zeros are added to
fill spaces to the left of the stored number. Numbers containing more digits than the register
can hold are broken up into register sized groups and stored in multiple locations.
It is often necessary to convert values written in one number system to another. The simplest
way is to reach for your calculator or use a conversion app. from the web. That is fine, but
converting a number in this way does not help you to understand the way each number system
works and how different systems are related. The purpose of this module is to explain just that,
and to get you to carry out some simple conversions so that you can not only convert between
number systems, but also understand how the conversion process works. There are various ways
to tackle conversions without a calculator; once the conversion methods are learned, the only
skills needed are the ability to multiply and divide, and to add together a few numbers.
Octal to Decimal
For example the system radix of octal is 8, since any of the 8 values from 0 to 7 can be written as
a single digit.
As (82 = 64), (81 = 8) and (80 =1), this gives a multiplier value for each column.
Multiply the digit in each column by the column multiplier value for that column to give:
64 + 16 + 6 = 8610
= (1x23)+(1x22)+(0x21)+(1x20)
= 8 + 4 +0 +1
= 1310
Hexadecimal to Decimal
= (Bx162)+(2x161)+(Dx160)
= (11x162)+(2x161)+(13x160)
= 2816 + 32 +13
= 286110
The same method (multiplying each digit by it's column value) can be to convert any system to
decimal.
Try these conversions to decimal WITHOUT USING YOUR CALCULATOR FOR THE
ACTUAL CONVERSION.
Decimal to Octal
Divide 8610 by the system radix, which when converting to octal is 8. This gives the answer 10,
with a remainder of 6.
Continue dividing the answer by 8 and writing down the remainder until the answer = 0
Now simply write out the remainders, starting from the bottom, to give 1268
Decimal to Binary
This process also works to convert decimal to binary, but this time the system radix is 2:
It also works to convert decimal to hexadecimal, but now the radix is 16:
As some of the remainders may be greater than 9 (and so require their alphabetic replacement),
you may find it easier to use Decimal for the remainders, and then convert them to Hex.
In electronics this is not normally done, as binary does not work well with fractions. However as
fractions do exist, there has to be a way for binary to deal with them. The method used is to get
rid of the radix (decimal) point by NORMALISING the decimal fraction using FLOATING
POINT arithmetic. As long as the binary system keeps track of the number of places the radix
point was moved during the normalisation process, it can be restored to its correct position when
the result of the binary calculation is converted back to decimal for display to the user.
However, for the sake of completeness, here is a method for converting decimal fractions to
binary fractions. By carefully selecting the fraction to be converted, the system works, but with
many numbers the conversion introduces inaccuracies; a good reason for not using binary
fractions in electronic calculations.
The radix point splits the number into two parts; the part to the left of the radix point is called the
INTEGER. The part to the right of the radix point is the FRACTION. A number such as 34.62510
is therefore split into 3410 (the integer), and .62510 (the fraction).
To convert such a fractional decimal number to any other radix, the method described above is
used to covert the integer.
So 3410 = 1000102
Converting the Decimal Fraction to Binary
To convert the fraction, this must be MULTIPLIED by the radix (in this case 2 to convert to
binary). Notice that with each multiplication a CARRY is generated from the third column. The
Carry will be either 1 or 0 and these are written down at the left hand side of the result. However
when each result is multiplied the carry is ignored (don’t multiply the carry). Each result is
multiplied in this way until the result (ignoring the carry) is 000. Conversion is now complete.
For the converted value just read the carry column from top to bottom.
So 0.62510 = .1012
However, with binary, there is a problem in using this method, .625 converted easily but many
fractions will not. For example if you try to convert .626 using this method you would find that
the binary fraction produced goes on to many, many places without a result of exactly 000 being
reached.
With some decimal fractions, using the above method will produce carries with a repeating
pattern of ones and zeros, indicating that the binary fraction will carry on infinitely. Many
decimal fractions can therefore only be converted to binary with limited accuracy. The number
of places after the radix point must be limited, to produce as accurate an approximation as
required.
Quick Conversions
The most commonly encountered number systems are binary and hexadecimal, and a quick
method for converting to decimal is to use a simple table showing the column weights, as shown
in Tables 1.2.1a and 1.2.1b.
Converting Binary to Decimal
To convert from binary to decimal, write down the binary number giving each bit its correct
‘weighting’ i.e. the value of the columns, starting with a value of one for the right hand (least
significant) bit. Giving each bit twice the value of the previous bit as you move left.
Example:
To convert the binary number 010000112 to decimal. Write down the binary number and assign a
‘weighting’ to each bit as in Table 1.2.1a
Now simply add up the values of each column containing a 1 bit, ignoring any columns
containing 0.
A similar method can be used to quickly convert hexadecimal to decimal, using Table 1.2.1b
The hexadecimal digits are entered in the bottom row and then multiplied by the weighting value
for that column.
Adding the values for each column gives the decimal value.
Now try some conversions yourself. Use pencil and paper to practice the method, rather than just
finding the answer.
Convert:
110100112 to decimal.
101110112 to decimal.
34F216 to decimal.
FFFF16 to decimal.
Don’t use your calculator - you need to learn the method, not just the answer!
Binary and Hexadecimal
Converting between binary and hexadecimal is a much simpler process; hexadecimal is really
just a system for displaying binary in a more readable form.
Binary is normally divided into Bytes (of 8 bits) it is convenient for machines but quite difficult
for humans to read accurately. Hexadecimal groups each 8-bit byte into two 4-bit nibbles, and
assigns a value of between 0 and 15 to each nibble. Therefore each hexadecimal digit (also worth
0 to 15) can directly represent one binary nibble. This reduces the eight bits of binary to just two
hexadecimal characters.
For example:
111010012 is split into 2 nibbles 11102 and 10012 then each nibble is assigned a hexadecimal
value between 0 and F.
The bits in the most significant nibble (11102) add up to 8+4+2+0 = 1410 = E16
The bits in the least significant nibble (10012) add up to 8+0+0+1 = 910 = 916
Notice that in Fig. 1.3.1, 1+1 = (1)0 requires a ‘carry’ of 1 to the next column. Remember that
binary 102 = 210 decimal
Example:
Binary addition is carried out just like decimal, by adding up the columns, starting at the right
and working column by column towards the left.
Just as in decimal addition, it is sometimes necessary to use a ‘carry’, and the carry is added to
the next column. For example, in Fig. 1.3.3 when two ones in the right-most column are added,
the result is 210 or 102, the least significant bit of the answer is therefore 0 and the 1 becomes the
carry bit to be added to the 1 in the next column.
Binary Subtraction
The rules for subtraction of binary numbers are again similar to decimal. When a large digit is to
be subtracted from a smaller one, a ‘borrow’ is taken from the next column to the left. In decimal
subtractions the digit ‘borrowed in’ is worth ten, but in binary subtractions the ‘borrowed in’
digit must be worth 210 or binary 102.
After borrowing from the next column to the left, a ‘pay back’ must occur. The subtraction rules
for binary are quite simple even if the borrow and pay back system create some difficulty.
Depending where and when you learned subtraction at school, you may have learned a different
subtraction method, other than ‘borrow and payback’, this is caused by changing fashions in
education. However any method of basic subtraction will work with binary subtraction but if you
do not want to use ‘borrow and payback’ you will need to apply your own subtraction method to
the problem.
Fig. 1.3.5 shows how binary subtraction works by subtracting 510 from 1110 in both decimal and
binary. Notice that in the third column from the right (22) a borrow from the (23) column is made
and then paid back in the MSB (23) column.
Note: In Fig 1.3.5 a borrow is shown as 10,and a pay back is shown as 01. Borrowing 1 from the
next highest value column to the left converts the 0 in the 22 column into 102 and paying back 1
from the 22 column to the 23 adds 1 to that column converting the 0 to 012.
Fig. 1.3.5 Binary Subtraction
Once these basic ideas are understood, binary subtraction is not difficult, but does require some
care. As the main concern in this module is with electronic methods of performing arithmetic
however, it will not be necessary to carry out manual subtraction of binary numbers using this
method very often. This is because electronic methods of subtraction do not use borrow and pay
back, as it leads to over complex circuits and slower operation. Computers therefore, use
methods that do not involve borrow. These methods will be fully explained in Number Systems
Modules 1.5 to 1.7.
Subtraction Exercise
Just to make sure you understand basic binary subtractions try the examples below on paper.
Don’t use your calculator, click the image to download and print the exercise sheet. Be sure to
show your working, including borrows and paybacks where appropriate. Using the squared paper
helps prevent errors by keeping your binary columns in line. This way you will learn about the
number systems, not just the numbers.
Fig. 1.3.6 Limits of 4 Bit Arithmetic
This is not a problem with this example as the answer 10102 (1010) still fits within 4 bits, but
what would happen if the total was greater than 1510?
As shown in Fig 1.3.7 there are cases where a carry bit is created that will not fit into the 4-bit
binary word. When arithmetic is carried out by electronic circuits, storage locations called
registers are used that can hold only a definite number of bits. If the register can only hold four
bits, then this example would raise a problem. The final carry bit is lost because it cannot be
accommodated in the 4-bit register, therefore the answer will be wrong.
To handle larger numbers more bits must be used, but no matter how many bits are used, sooner
or later there must be a limit. How numbers are held in a computer system depends largely on the
size of the registers available and the method of storing data in them, however any electronic
system will have a way of overcoming this ‘overflow’ problem, but will also have some limit to
the accuracy of its arithmetic.
Signed Binary Notation
All the binary arithmetic problems looked at in Module 1.3 used only POSITIVE numbers. The
reason for this is that it is not possible in PURE binary to signify whether a number is positive or
negative. This of course would present a problem in any but the simplest of arithmetic.
There are a number of ways in which binary numbers can represent both positive and negative
values, 8 bit systems for example normally use one bit of the byte to represent either + or − and
the remaining 7 bits to give the value. One of the simplest of these systems is SIGNED
BINARY, also often called ‘Sign and Magnitude’, which exists in several similar versions, but is
commonly an 8 bit system that uses the most significant bit (msb) to indicate a positive or a
negative value. By convention, a 0 in this position indicates that the number given by the
remaining 7 bits is positive, and a most significant bit of 1 indicates that the number is negative.
For example:
The brackets around the msb (the sign bit) are included here for clarity but brackets are not
normally used. Because only 7 bits are used for the actual number, the values the system can
represent range from is −12710 or 111111112, to +12710.
A comparison between signed binary, pure binary and decimal numbers is shown in Table 1.4.1.
Notice that in the signed binary representation of positive numbers between +010 and +12710, all
the positive values are just the same as in pure binary. However the pure binary values
equivalents of +12810 to +25510 are now considered to represent negative values −0 to −127.
This also means that 010 can be represented by 000000002 (which is also 0 in pure binary and in
decimal) and by 100000002 (which is equivalent to 128 in pure binary and in decimal).
Fig. 1.4.1 Adding Positive Numbers in Signed Binary
In Fig. 1.4.1 two positive (msb = 0) numbers are added and the correct answer is obtained. This
is really no different to adding two numbers in pure binary as described Number Systems
Module 1.3.
In Fig. 1.4.2 however, the negative number −5 is added to +7, the same action in fact as
SUBTRACTING 5 from 7, which means that subtraction should be possible by merely adding a
negative number to a positive number. Although this principle works in the decimal version the
result using signed binary is 100011002 or −1210 which of course is wrong, the result of 7 − 5
should be +2.
Although signed binary can represent positive and negative numbers, if it is used for
calculations, some special action would need to be taken, depending on the sign of the numbers
used, and how the two values for 0 are handled, to obtain the correct result. Whilst signed binary
does solve the problem of REPRESENTING positive and negative numbers in binary, and to
some extent carrying out binary arithmetic, there are better sign and magnitude systems for
performing binary arithmetic. These systems are the ONES COMPLEMENT and TWOS
COMPLEMENT systems, which are described in Number Systems Module 1.5.
Signed Binary Notation
All the binary arithmetic problems looked at in Module 1.3 used only POSITIVE numbers. The
reason for this is that it is not possible in PURE binary to signify whether a number is positive or
negative. This of course would present a problem in any but the simplest of arithmetic.
There are a number of ways in which binary numbers can represent both positive and negative
values, 8 bit systems for example normally use one bit of the byte to represent either + or − and
the remaining 7 bits to give the value. One of the simplest of these systems is SIGNED
BINARY, also often called ‘Sign and Magnitude’, which exists in several similar versions, but is
commonly an 8 bit system that uses the most significant bit (msb) to indicate a positive or a
negative value. By convention, a 0 in this position indicates that the number given by the
remaining 7 bits is positive, and a most significant bit of 1 indicates that the number is negative.
For example:
The brackets around the msb (the sign bit) are included here for clarity but brackets are not
normally used. Because only 7 bits are used for the actual number, the values the system can
represent range from is −12710 or 111111112, to +12710.
A comparison between signed binary, pure binary and decimal numbers is shown in Table 1.4.1.
Notice that in the signed binary representation of positive numbers between +010 and +12710, all
the positive values are just the same as in pure binary. However the pure binary values
equivalents of +12810 to +25510 are now considered to represent negative values −0 to −127.
This also means that 010 can be represented by 000000002 (which is also 0 in pure binary and in
decimal) and by 100000002 (which is equivalent to 128 in pure binary and in decimal).
Fig. 1.4.1 Adding Positive Numbers in Signed Binary
In Fig. 1.4.1 two positive (msb = 0) numbers are added and the correct answer is obtained. This
is really no different to adding two numbers in pure binary as described Number Systems
Module 1.3.
In Fig. 1.4.2 however, the negative number −5 is added to +7, the same action in fact as
SUBTRACTING 5 from 7, which means that subtraction should be possible by merely adding a
negative number to a positive number. Although this principle works in the decimal version the
result using signed binary is 100011002 or −1210 which of course is wrong, the result of 7 − 5
should be +2.
Although signed binary can represent positive and negative numbers, if it is used for
calculations, some special action would need to be taken, depending on the sign of the numbers
used, and how the two values for 0 are handled, to obtain the correct result. Whilst signed binary
does solve the problem of REPRESENTING positive and negative numbers in binary, and to
some extent carrying out binary arithmetic, there are better sign and magnitude systems for
performing binary arithmetic. These systems are the ONES COMPLEMENT and TWOS
COMPLEMENT systems, which are described in Number Systems Module 1.5.
Ones Complement
The complement (or opposite) of +5 is −5. When representing positive and negative numbers in
8-bit ones complement binary form, the positive numbers are the same as in signed binary
notation described in Number Systems Module 1.4 i.e. the numbers 0 to +127 are represented as
000000002 to 011111112. However, the complement of these numbers, that is their negative
counterparts from −127 to −0, are represented by ‘complementing’ each 1 bit of the positive
binary number to 0 and each 0 to 1.
For example:
+510 is 000001012
−510 is 111110102
Notice in the above example, that the most significant bit (msb) in the negative number −510 is 1,
just as in signed binary. The remaining 7 bits of the negative number however are not the same
as in signed binary notation. They are just the complement of the remaining 7 bits, and these give
the value or magnitude of the number.
The problem with signed the binary arithmetic described in Number Systems Module 1.4 was
that it gave the wrong answer when adding positive and negative numbers. Does ones
complement notation give better results with negative numbers than signed binary?
Fig. 1.5.1 shows the result of adding −4 to +6, using ones complement,(this is the same as
subtracting +4 from +6, and so it is crucial to arithmetic).
This is better than subtraction in signed binary, but it is still not correct. The result should be +210
but the result is +1 (notice that there has also been a carry into the none existent 9th bit).
Fig. 1.5.2 shows another example, this time adding two negative numbers −4 and −3.
Because both numbers are negative, they are first converted to ones complement notation.
+410 is 00000100 in pure 8 bit binary, so complementing gives 11111011.
The result of 111101112 is in its complemented form so the 7 bits after the sign bit (1110111),
should be re-complemented and read as 0001000, which gives the value 810. As the most
significant bit (msb) of the result is 1 the result must be negative, which is correct, but the
remaining seven bits give the value of −8. This is still wrong by 1, it should be −7.
There is a way to correct this however. Whenever the ones complement system handles negative
numbers, the result is 1 less than it should be, e.g. 1 instead of 2 and −8 instead of −7, but
another thing that happens in negative number ones complement calculations is that a carry is
‘left over’ after the most significant bits are added. Instead of just disregarding this carry bit, it
can be added to the least significant bit of the result to correct the value. This process is called
‘end around carry’ and corrects for the result -1 effect of the ones complement system.
There are however, still problems with both ones complement and signed binary notation. The
ones complement system still has two ways of writing 010 (000000002 = +010 and 111111112 =
−010); additionally there is a problem with the way positive and negative numbers are written. In
any number system, the positive and negative versions of the same number should add to
produce zero. As can be seen from Table 1.5.1, adding +45 and −45 in decimal produces a result
of zero, but this is not the case in either signed binary or ones complement.
This is not good enough, however there is a system that overcomes this difficulty and allows
correct operation using both positive and negative numbers. This is the Twos Complement
system.
To perform binary subtraction, the twos complement system uses the technique of
complementing the number to be subtracted. In the ones complement system this produced a
result that was 1 less than the correct answer, but this could be corrected by using the ‘end
around carry’ system. This still left the problem that positive and negative versions of the same
number did not produce zero when added together.
The twos complement system overcomes both of these problems by simply adding one to the
ones complement version of the number before addition takes place. The process of producing a
negative number in Twos Complement Notation is illustrated in Table 1.5.2.
Fig. 1.5.3 Adding a Number to its Twos Complement Produces Zero
This version of −5 now, not only gives the correct answer when used in subtractions but is also
the additive inverse of +5 i.e. when added to +5 produces the correct result of 0, as shown in Fig.
1.5.3
Note that in twos complement the (1) carry from the most significant bit is discarded as there is
no need for the ‘end around carry’ fix.
With numbers electronically stored in their twos complement form, subtractions can be carried
out more easily (and faster) as the microprocessor has simply to add two numbers together using
nearly the same circuitry as is used for addition.
Twos Complement Addition
Fig 1.5.4 shows an example of addition using 8 bit twos complement notation. When adding two
positive numbers, their the sign bits (msb) will both be 0, so the numbers are written and added
as a pure 8-bit binary addition.
Fig. 1.5.5 shows the simplest case of twos complement subtraction where one positive number
(the subtrahend) is subtracted from a larger positive number (the minuend). In this case the
minuend is 1710 and the subtrahend is 1010.
Because the minuend is a positive number its sign bit (msb) is 0 and so it can be written as a pure
8 bit binary number.
The subtrahend is to be subtracted from the minuend and so needs to be complemented (simple
ones complement) and 1 added to the least significant bit (lsb) to complete the twos complement
and turn +10 into −10.
When these three lines of digits, and any carry 1 bits are added, remembering that in twos
complement, any carry from the most significant bit is discarded. The answer (the difference
between 17 and 10) is 000001112 = 710 which is correct. Therefore the twos complement method
has provided correct subtraction by using only addition and complementing, both operations that
can be simply accomplished by digital electronic circuits.
Subtraction with a negative result
Some subtractions will of course produce an answer with a negative value. In Fig. 1.5.6 the result
of subtracting 17 from 10 should −710 but the twos complement answer of 111110012 certainly
doesn’t look like −7. However the sign bit is indicating correctly that the answer is negative, so
in this case the 7 bits indicating the value of the negative answer need to be 'twos complemented'
once more to see the answer in a recognisable form.
When the 7 value bits are complemented and 1 is added to the least significant bit however, like
magic, the answer of 100001112 appears, which confirms that the original answer was in fact −7
in 8 bit twos complement form.
It seems then, that twos complement will get the right answer in every situation?
Well guess what − it doesn’t! There are some cases where even twos complement will give a
wrong answer. In fact there are four conditions where a wrong answer may crop up:
The problem seems to be with the word ‘large’. What is large depends on the size of the digital
word the microprocessor uses for calculation. As shown in Table 1.5.3, if the microprocessor
uses an 8−bit word, the largest positive number that can appear in the problem OR THE
RESULT is +12710 and the largest negative number will be −12810. The range of positive values
appears to be 1 less than the negative range because 0 is a positive number in twos complement
and has only one occurrence (000000002) in the whole range of 25610 values.
With a 16-bit word length the largest positive and negative numbers will be +3276710 and
-3276810, but there is still a limit to the largest number that can appear in a single calculation.
Overflow Problems.
Steps can be taken to accommodate large numbers, by breaking a long binary word down into
byte sized sections and carrying out several separate calculations before assembling the final
answer. However this doesn’t solve all the cases where errors can occur.
A typical overflow problem that can happen even with single byte numbers is illustrated in Fig.
1.5.7.
In this example, the two numbers to be added (11510 and 9110) should give a sum of 20610 and at
first glance 110011102 looks like the correct answer of 20610,but remember that in the 8 bit twos
complement system the most significant bit is the sign of the number, therefore the answer
appears to be a negative value and reading just the lower 7 bits gives 10011102 or -7810.
Although twos complement negative answers are not easy to read, this is clearly wrong as the
result of adding two positive numbers must give a positive answer.
According to the information in Fig 1.5.6, as the answer is negative, complementing the lower 7
bits of 110011102 and adding 1 should reveal the value of the correct answer, but carrying out
the complement+1 on these bits and leaving the msb unchanged gives 101100102 which is -5010.
This is nothing like the correct answer of 20610 so what has happened?
The 8 bit twos complement notation has not worked here because adding 115 + 91 gives a total
greater than +127, the largest value that can be held in 8-bit twos complement notation.
What has happened is that an overflow has occurred, due to a 1 being carried from bit 6 to bit 7
(the most significant bit, which is of course the sign bit), this changes the sign of the answer.
Additionally it changes the value of the answer by 12810 because that would be the value of the
msb in pure binary. So the original answer of 7810 has ‘lost’ 12810 to the sign bit. The addition
would have been correct if the sign bit had been part of the value, however the calculation was
done in twos complement notation and the sign bit is not part of the value.
Of course in real electronic calculations, a single byte overflow situation does not usually cause a
problem; computers and calculators can fortunately deal with larger numbers than 12710. They
achieve this because the microprocessors used are programmed to carry out the calculation in a
number of steps, and although each step must still be carried out in a register having a set word
length, e.g. 8 bits or 16 bits, corrective action can also be taken if an overflow situation is
detected at any stage.
Microprocessors deal with this problem by using a special register called a status register, flag
register or conditions code register, which automatically flags up any problem such as an
overflow or a change of sign, that occurs. It also provides other information useful to the
programmer, so that whatever problem occurs; corrective action can be taken by software, or in
many cases by firmware permanently embedded within the microprocessor to deal with a range
of math problems.
Whatever word length the microprocessor is designed to handle however, there must always be a
limit to the word length, and so the programmer must be aware of the danger of errors similar to
that described in Fig. 1.5.7.
A typical flag register is illustrated in Fig. 1.5.8 and consists of a single 8-bit storage register
located within the microprocessor, in which some bits may be set by software to control the
actions of the microprocessor, and some bits are set automatically by the results of arithmetic
operations within the microprocessor.
Bit 0 (C) (set by arithmetic result) = 1 Carry has been created from result msb.
Bit 6 (V) (set by arithmetic result) = 1 Overflow has occurred (result too big for 8 bits).
Bit 7 (N) (set by arithmetic result) = 1 Negative result (msb of result is 1).
It seems therefore, that the only math that microprocessors can do is to add together two numbers
of a limited value, and to complement binary numbers. Well at a basic level this is true, however
there are some additional tricks they can perform, such as shifting all the bits in a binary word
left or right, as a partial aid to multiplication or division. However anything more complex must
be done by software.
There are more efficient methods for carrying out subtraction and division using software, or
extra features within some microprocessors and/or the use of embedded maths firmware.
Representing Decimal Numbers
When calculations are carried out electronically they will usually be in binary or twos
complement notation, but the result will very probably need to be displayed in decimal form. A
binary number with its bits representing values of 1, 2, 4, 8, 16 etc. presents problems. It would
be better if a particular number of binary bits could represent the numbers 0 to 9, but this doesn’t
happen in pure binary, a 3 bit binary number represents the values 0 to 7 and 4 bit represents 0 to
15. What is needed is a system where a group of binary digits can represent the decimal numbers
0-9, and the next group 10-90 etc.
To make this possible, binary codes are used that have ten values, but where each value is
represented by the 1s and 0s of a binary code. These special ‘half way’ codes are called
BINARY CODED DECIMAL or BCD. There are several different BCD codes, but they have a
basic similarity. Each of the ten decimal digits 0 to 9 is represented by a group of 4 binary bits,
but in codes the binary equivalents of the 10 decimal numbers do not necessarily need to be in a
consecutive order. Any group of 4 bits can represent any decimal value, so long as the
relationship for that particular code is known.
In fact any ten of the 16 available four bit combinations could be used to represent 10 decimal
numbers, and this is where different BCD codes vary. There can be advantages in some specialist
applications in using some particular variation of BCD. For example it may be useful to have a
BCD code that can be used for calculations, which means having positive and negative values,
similar to the twos complement system, but BCD codes are most often used for the display of
decimal digits. The most commonly encountered version of BCD binary code is the BCD8421
code. In this version the numbers 0 to 9 are represented by their pure binary equivalents, 4 bits
per decimal number, in consecutive order.
BCD Codes
The BCD8421 code is so called because each of the four bits is given a ‘weighting’ according to its
column value in the binary system. The least significant bit (lsb) has the weight or value 1, the
next bit, going left, the value 2. The next bit has the value 4, and the most significant bit (msb)
the value 8, as shown in Table 1.6.1.
So the 8421BCD code for the decimal number 610 is 01108421. Check this from Table 1.6.1.
For numbers greater than 9 the system is extended by using a second block of 4 bits to represent
tens and a third block to represent hundreds etc.
99210 in 16 bit binary would be 00000011111000002 but in BCD8421 is 1001 1001 0010.
Therefore BCD acts as a half way stage between binary and true decimal representation, often
preparing the result of a pure binary calculation for display on a decimal numerical display.
Although BCD can be used in calculation, the values are not the same as pure binary and must be
treated differently if correct results are to be obtained. The facility to make calculations in BCD
is included in some microprocessors.
One of the main drawbacks of BCD is that, because sixteen values are available from four bits,
but only ten are used, there are several redundant values whichever BCD system is used. This is
wasteful in terms of circuitry, as the fourth bit (the 8s column) is under used.
32110 to BCD8421
6523110 to BCD8421
001101110110 BCD8421 to decimal.
The four BCD bits are usually converted (decoded) to provide the correct logic for driving the 7
inputs of the display by integrated circuits such as the HEF4511B BCD to 7 segment
decoder/driver from NXP Semiconductors and the 7466 BCD to 7 segment decoder.
Question
BCD to 7 segment decoders implement a logic truth table such as the one illustrated in Table
1.6.2. There are different types of display implemented by different types of decoder, notice in
table 1.6.2 that some of the output digits* may be either 1 or 0 (depending on the IC used). Why
would this be, and what effect would it have on the display?
Notice that the 4 bit input to the decoder illustrated in Table 1.6.2 can, in this case, be in either
BCD8421 or in 4 bit binary as any binary number over 9 will result in a blank display.
Gray Code
Fig. 1.6.3 Four Bit Gray Code Disk
Binary codes are not only used for data output. Another special binary code that is extensively
used for reading positional information on mechanical devices such as rotating shafts is Gray
Code. This is a 4 bit code that uses all 16 values, and as the values change through 0-1510 the
code‘s binary values change only 1 bit at a time, (see Table 1.6.4). The binary values are
encoded onto a rotating disk (Fig. 1.6.3) and as it rotates the light and dark areas are read by
optical sensors.
As only one sensor sees a change at any one time, this reduces errors that may be created as the
sensors pass from light to dark (0 to 1) or back again. The problem with this kind of sensing is
that if two or more sensors are allowed to change simultaneously, it cannot be guaranteed that
the data from the sensors would change at exactly the same time. If this happened there would be
a brief time when a wrong binary code may be generated, suggesting that the disk is in a
different position to its actual position. The one bit at a time feature of gray code effectively
eliminates such errors. Notice also that the sequence of binary values also rotates continually,
with the code for 15 changing back to 0 with only 1 bit changing. With a 4 bit coded disk as
illustrated in Fig. 1.6.3, the position is read every 22.5° but with more bits, greater accuracy can
be achieved.
Number Systems Quiz
Try our quiz, based on the information you can find in Digital Electronics Module 1 − Number
Systems. Submit your answers and see how many you get right. If you get any answers wrong.
Just follow the hints to find the right answer and learn about the number systems used in digital
electronics as you go.
1.
Which of the following numbers is equivalent to the normalised number 0.126 x 102 ?
a) 1260010
b) 12.610
c) 10.2610
d) 11111102
2.
Which of the following decimal numbers is equivalent to the highest value that can be held in an 8-bit
binary register using unsigned binary?
a) 127
b) 256
c) 65536
d) 255
3.
What is the decimal equivalent of the number 3A16?
a) 58
b) 39
c) 310
d) 49
4.
Refer to Fig. 1.7.1.Which of the tables correctly describes the rules of binary addition?
a)
b)
c)
d)
5.
What is the 8 bit unsigned binary result of 5610 − 3110?
a) 000110012
b) 000101012
c) 001100012
d) 000011012
6.
What is the result of adding 710 and −410 using 8 bit signed binary notation?
a) 100000112
b) 000010112
c) 100010112
d) 000000112
7.
What is the widest range of decimal numbers that can be written in 8 bit signed binary notation?
a) −127 to +127
b) −0 to +256
c) −128 to +128
d) −256 to −1
8.
End around carry is used to correct the result of additions in which of the following number systems?
d) Excess 3 BCD
9.
Which of the following 4 bit Excess 3 numbers is equivalent to 510?
a) 1101bcdxs3
b) 0010bcdxs3
c) 1000bcdxs3
d) 1010bcdxs3
10.
Which of the following Twos Complement binary numbers is equivalent to −7510?
a) 11001011
b) 01001100
c) 11001100
d) 10110101