[go: up one dir, main page]

0% found this document useful (0 votes)
11 views42 pages

Module 1

The document outlines the course CE 2704 - Digital Logic Design, focusing on the differences between analog and digital systems, including their advantages and examples. It covers number systems, binary arithmetic, and various methods of converting between them. The course aims to equip students with a foundational understanding of digital logic design principles.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views42 pages

Module 1

The document outlines the course CE 2704 - Digital Logic Design, focusing on the differences between analog and digital systems, including their advantages and examples. It covers number systems, binary arithmetic, and various methods of converting between them. The course aims to equip students with a foundational understanding of digital logic design principles.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 42

CE 2704 - Digital Logic Design

Dr. Ehsan Ali


Assumption University of Thailand
ehsanali@au.edu

Semester 2/2024
Contents

1 Module 1: Analog Versus Digital - Number Systems - Binary Arithmetic 2


1.1 Analog Versus Digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1 Learning Outcomes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.2 Differences Between Analog and Digital Systems . . . . . . . . . . . . . . . . . 2
1.1.2.1 Analog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.2.2 Digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.2.3 Examples of analog signals versus digital signals . . . . . . . . . . . . 3
1.1.3 Advantages of Digital Systems over Analog Systems . . . . . . . . . . . . . . . 4
1.2 Number Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.1 Learning Outcomes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.2 Positional Number Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.2.1 Generic Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.3 Decimal Number System (Base 10) . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.4 Binary Number System (Base 2) . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.5 Octal Number System (Base 8) . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.6 Hexadecimal Number System (Base 16) . . . . . . . . . . . . . . . . . . . . . . 9
1.2.7 Base Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2.7.1 Converting to Decimal . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.7.2 Binary to Decimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.7.3 Octal to Decimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2.7.4 Hexadecimal to Decimal . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.7.5 Decimal to Binary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.7.6 Decimal to Octal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2.7.7 Decimal to Hexadecimal . . . . . . . . . . . . . . . . . . . . . . . . 16
1.2.7.8 Converting Between 2n Bases . . . . . . . . . . . . . . . . . . . . . . 17
1.2.7.9 Binary to Octal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.2.7.10 Binary to Hexadecimal . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.2.7.11 Octal to Binary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.2.7.12 Hexadecimal to Binary . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.2.7.13 Octal to Hexadecimal . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.2.7.14 Hexadecimal to Octal . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.3 Binary Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3.1 Addition (Carries) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3.2 Subtraction (Borrows) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.4 Unsigned and Signed Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.4.1 Unsigned Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.4.2 Signed Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.4.2.1 Signed Magnitude . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

1
1.4.2.2 One’s Complement . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.4.3 Two’s Complement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.4.3.1 Arithmetic with Two’s Complement . . . . . . . . . . . . . . . . . . 34
1.5 Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

2
Chapter 1

Module 1: Analog Versus Digital - Number


Systems - Binary Arithmetic

1.1 Analog Versus Digital


1.1.1 Learning Outcomes
• Describe the fundamental differences between analog and digital systems.

• Describe the advantages of digital systems compared to analog systems.

1.1.2 Differences Between Analog and Digital Systems


1.1.2.1 Analog
Let’s begin by looking at signaling. In electrical systems, signals represent information that is transmitted
between devices using an electrical quantity (voltage or current). An analog signal is defined as a contin-
uous, time-varying quantity that corresponds directly to the information it represents. An example of this
would be a barometric pressure sensor that outputs an electrical voltage corresponding to the pressure
being measured. As the pressure goes up, so does the voltage. While the range of the input (pressure) and
output (voltage) will have different spans, there is a direct mapping between the pressure and voltage.
Another example would be sound striking a traditional analog microphone. Sound is a pressure wave that
travels through a medium such as air. As the pressure wave strikes the diaphragm in the microphone,
the diaphragm moves back and forth. Through the process of inductive coupling (See Note 1), this
movement is converted to an electric current. The characteristics of the current signal produced (e.g.,
frequency and magnitude) correspond directly to the characteristics of the incoming sound wave. The
current can travel down a wire and go through another system that works in the opposite manner by
inductively coupling the current onto another diaphragm, which in turn moves back and forth forming a
pressure wave and thus sound (i.e., a speaker or earbud). In both of these examples, the electrical signal
represents the actual information that is being transmitted and is considered analog. Analog signals can
be represented mathematically as a function with respect to time.

3
Note 1: In electrical engineering, two conductors are said to be inductively coupled or mag-
netically coupled when they are configured in a way such that change in current through one
wire induces a voltage across the ends of the other wire through electromagnetic induction. A
changing current through the first wire creates a changing magnetic field around it by Ampere’s
circuital law. The changing magnetic field induces an electromotive force (EMF or voltage) in
the second wire by Faraday’s law of induction. The amount of inductive coupling between two
conductors is measured by their mutual inductance.

1.1.2.2 Digital
In digital signaling the electrical signal itself is not directly the information it represents; instead, the
information is encoded. The most common type of encoding is binary (1’s and 0’s). The 1’s and 0’s
are represented by the electrical signal. The simplest form of digital signaling is to define a threshold
voltage directly in the middle of the range of the electrical signal. If the signal is above this threshold,
the signal is representing a 1. If the signal is below this threshold, the signal is representing a 0. This type
of signaling is not considered continuous as in analog signaling; instead, it is considered to be discrete
because the information is transmitted as a series of distinct values. The signal transitions between a 1 to
0 and 0 to 1 are assumed to occur instantaneously. While this is obviously impossible, for the purposes
of information transmission, the values can be interpreted as a series of discrete values. This is a digital
signal and is not the actual information, but rather the binary encoded representation of the original
information. Digital signals are not represented using traditional mathematical functions; instead, the
digital values are typically held in tables of 1’s and 0’s.

1.1.2.3 Examples of analog signals versus digital signals


Table 1.1 provides few examples of analog signals versus digital signals.

Analog Signals Digital Signals


Human interface to a computer Information stored on a computer
Electrical signal representing sound that travels MP3 data stored in a file being transferred be-
down the wire of a set of headphones tween computer hardware modules
Actual sound coming out of headphones MP3 data stored in a file storing a sound track
Electricity coming out of a wall outlet information being transmitted over the Internet
Voltage from a battery or solar cell Computers, tablets, and smartphones
Table 1.1: Digital vs Analog Signals.

Figure 1.1 shows an example of analog signal (left) and an example of digital signal (right). While
the digital signal is in reality continuous, it represents a series of discrete 1 and 0 values.

4
Figure 1.1: Analog (left) vs. digital (right) signals.

In-class Question 1: If a digital signal is only a discrete representation of real information, how is
it possible to produce high-quality music without hearing "gaps" in the output due to the digitization
process? [8min]

1. The gaps are present, but they occur so quickly that the human ear can’t detect them.

2. When the digital music is converted back to analog sound, the gaps are smoothed out since an
analog signal is by definition continuous.

3. Digital information is a continuous, time-varying signal so there aren’t gaps.

4. The gaps can be heard if the music is played slowly, but at normal speed, they can’t be.

1.1.3 Advantages of Digital Systems over Analog Systems


There are a variety of reasons that digital systems are preferred over analog systems. First is their ability
to operate within the presence of noise. Since an analog signal is a direct representation of the physical
quantity it is transmitting, any noise that is coupled onto the electrical signal is interpreted as noise on the
original physical quantity. An example of this is when you are listening to an AM/FM radio and you hear
distortion of the sound coming out of the speaker. In the case of digital signaling, a significant amount of
noise can be added to the signal while still preserving the original 1’s and 0’s that are being transmitted.
For example, if the signal is representing a 0, the receiver will still interpret the signal as a 0 as long
as the noise doesn’t cause the level to exceed the threshold. Once the receiver interprets the signal as a
0, it stores the encoded value as a 0, thus ignoring any noise present during the original transmission.
Fig. 1.2 shows the exact same noise added to the analog and digital signals from Fig. 1.1. The analog
signal is distorted; however, the digital signal is still able to transmit the 0’s and 1’s that represent the
information.

5
Figure 1.2: Analog vs. digital signals in the presence of noise.

Another reason that digital systems are preferred over analog ones is the simplicity of the circuitry.
In order to produce a 1 and 0, you simply need an electrical switch. If the switch connects the output to
a voltage below the threshold, then it produces a 0. If the switch connects the output to a voltage above
the threshold, then it produces a 1. It is relatively simple to create such a switching circuit using modern
transistors. Analog circuitry, however, needs to perform the conversion of the physical quantity it is
representing (e.g., pressure, sound) into an electrical signal all the while maintaining a direct correspon-
dence between the input and output. Since analog circuits produce a direct, continuous representation of
information, they require more complicated designs to achieve linearity in the presence of environmental
variations (e.g., power supply, temperature, fabrication differences).
Fig. 1.3 shows an example comparison between an analog-inverting amplifier and a digital inverter.
The analog amplifier uses dozens of transistors (inside the triangle) and two resistors to perform the in-
version of the input. The digital inverter uses two transistors that act as switches to perform the inversion.

Figure 1.3: Analog vs. digital circuit complexity.

6
A final reason that digital systems are being widely adopted is their reduced power consumption.
With the advent of complementary metal-oxide transistors (CMOS), electrical switches can be created
that consume very little power to turn on or off and consume relatively negligible amounts of power to
keep on or off. This has allowed large-scale digital systems to be fabricated without excessive levels
of power consumption. For stationary digital systems such as servers and workstations, extremely large
and complicated systems can be constructed that consume reasonable amounts of power. For portable
digital systems such as smartphones and tablets, this means useful tools can be designed that are able
to run on portable power sources. Analog circuits, on the other hand, require continuous power to ac-
curately convert and transmit the electrical signal representing the physical quantity. Also, the circuit
techniques that are required to compensate for variances in power supply and fabrication processes in
analog systems require additional power consumption. For these reasons, analog systems are being
replaced with digital systems wherever possible to exploit their noise immunity, simplicity, and low-
power consumption. While analog systems will always be needed at the transition between the physical
(e.g., microphones, camera lenses, sensors, video displays) and the electrical world, it is anticipated
that the push toward digitization of everything in between (e.g., processing, transmission, storage) will
continue.
In-class Question 2: When does the magnitude of electrical noise on a digital signal prevent the
original information from being determined? [8min]
1. When it causes the system to draw too much power.
2. When the shape of the noise makes the digital signal look smooth and continuous like a sine wave.
3. When the magnitude of the noise is large enough that it causes the signal to inadvertently cross the
threshold voltage.
4. It doesn’t. A digital signal can withstand any magnitude of noise.

1.2 Number Systems


Logic circuits are used to generate and transmit 1’s and 0’s to compute and convey information. This
two-valued number system is called binary. As presented earlier, there are many advantages of using a
binary system; however, the human brain has been taught to count, label, and measure using the decimal
number system. The decimal number system contains ten unique symbols (0 → 9). Each of these
symbols is assigned a relative magnitude to the other symbols. For example, 0 is less than 1, 1 is less
than 2, etc. It is often conjectured that the 10-symbol number system that we humans use is due to
the availability of our ten fingers (or digits) to visualize counting up to 10. Regardless, our brains are
trained to think of the real world in terms of a decimal system. In order to bridge the gap between the
way our brains think (decimal) and how we build our computers (binary), we need to understand the
basics of number systems. This includes the formal definition of a positional number system and how
it can be extended to accommodate any arbitrarily large (or small) value. This also includes how to
convert between different number systems that contain different numbers of symbols. In this section,
we cover 4 different number systems: decimal (10 symbols), binary (2 symbols), octal (8 symbols), and
hexadecimal (16 symbols). The study of decimal and binary is obvious as they represent how our brains
interpret the physical world (decimal) and how our computers work (binary). Hexadecimal is studied be-
cause it is a useful means to represent large sets of binary values using a manageable number of symbols.
Octal is rarely used but is studied as an example of how the formalization of the number systems can be
applied to all systems regardless of the number of symbols they contain. This section will also discuss
how to perform basic arithmetic in the binary number system and represent negative numbers. The goal
of this section is to provide an understanding of the basic principles of binary number systems.

7
1.2.1 Learning Outcomes
• Describe the formation and use of positional number systems.

• Convert numbers between different bases.

• Perform binary addition and subtraction by hand.

• Use two’s complement numbers to represent negative numbers.

1.2.2 Positional Number Systems


A positional number system allows the expansion of the original set of symbols so that they can be used
to represent any arbitrarily large (or small) value. For example, if we use the 10 symbols in our decimal
system, we can count from 0 to 9. Using just the individual symbols, we do not have enough symbols
to count beyond 9. To overcome this, we use the same set of symbols but assign a different value to
the symbol based on its position within the number. The position of the symbol with respect to other
symbols in the number allows an individual symbol to represent greater (or lesser) values. We can use
this approach to represent numbers larger than the original set of symbols. For example, let’s say we
want to count from 0 upward by 1. We begin counting 0, 1, 2, 3, 4, 5, 6, 7, 8 to 9. When we are out
of symbols and wish to go higher, we bring on a symbol in a different position with that position being
valued higher and then start counting over with our original symbols (e.g., ..., 9, 10, 11,... 19, 20, 21,...).
This is repeated each time a position runs out of symbols (e.g., ..., 99, 100, 101... 999, 1000, 1001,...).
First, let’s look at the formation of a number system. The first thing that is needed is a set of symbols.
The formal term for one of the symbols in a number system is a numeral. One or more numerals are
used to form a number. We define the number of numerals in the system using the terms radix or base.
For example, our decimal number system is said to be base 10 or have a radix of 10 because it consists
of ten unique numerals or symbols.

Radix = Base ≡ the number of numerals in the number system


The next thing that is needed is the relative value of each numeral with respect to the other numerals
in the set. We can say 0 < 1 < 2 < 3, etc. to define the relative magnitudes of the numerals in this set.
The numerals are defined to be greater or less than their neighbors by a magnitude of 1. For example, in
the decimal number system, each of the subsequent numerals is greater than its predecessor by exactly 1.
When we define this relative magnitude, we are defining that the numeral 1 is greater than the numeral
0 by a magnitude of 1, the numeral 2 is greater than the numeral 1 by a magnitude of 1, etc. At this
point we have the ability to count from 0 to 9 by 1’s. We also have the basic structure for mathematical
operations that have results that fall within the numeral set from 0 to 9 (e.g., 1 + 2 = 3). In order to
expand the values that these numerals can represent, we need to define the rules of a positional number
system.

1.2.2.1 Generic Structure


In order to represent larger or smaller numbers than the lone numerals in a number system can represent,
we adopt a positional system. In a positional number system, the relative position of the numeral within
the overall number dictates its value. When we begin talking about the position of a numeral, we need
to define a location to which all of the numerals are positioned with respect to. We define the radix
point as the point within a number to which numerals to the left represent whole numbers and numerals
to the right represent fractional numbers. The radix point is denoted with a period (dot) (i.e., "."). A

8
particular number system often renames this radix point to reflect its base. For example, in the base 10
number system (i.e., decimal), the radix point is commonly called the decimal point; however, the term
radix point can be used across all number systems as a generic term. If the radix point is not present in a
number, it is assumed to be to the right of number. Fig. 1.4 shows an example number highlighting the
radix point and the relative positions of the whole and fractional numerals.

Figure 1.4: Definition of radix point.

Next, we need to define the position of each numeral with respect to the radix point. The position of
the numeral is assigned a whole number with the number to the left of the radix point having a position
value of 0. The position number increases by 1 as numerals are added to the left (2, 3, 4...) and decreased
by 1 as numerals are added to the right (-1, -2, -3). We will use the variable p to represent position. The
position number will be used to calculate the value of each numeral in the number based on its relative
position to the radix point. Fig. 1.5 shows the example number with the position value of each numeral
highlighted.

Figure 1.5: Definition of numeral positions.

In order to create a generalized format of a number, we assign the term digit d to each of the numerals
in the number. The term digit signifies that the numeral has a position. The position of the digit within
the number is denoted as a subscript. The term digit can be used as a generic term to describe a numeral
across all systems, although some number systems will use a unique term instead of digit which indicates
its base. For example, the binary system uses the term bit instead of digit; however, using the term digit
to describe a generic numeral in any system is still acceptable. Fig. 1.6 shows the generic subscript
notation used to describe the position of each digit in the number.

Figure 1.6: Digit Notation: The position is denoted as a subscript.

We write a number from left to right starting with the highest position digit that is greater than 0 and
ending with the lowest position digit that is greater than 0. This reduces the number of numerals that are

9
written; however, a number can be represented with an arbitrary number of 0’s to the left of the highest
position digit greater than 0 and an arbitrary number of 0’s to the right of the lowest position digit greater
than 0 without affecting the value of the number. For example, the number 132.654 could be written as
0132.6540 without affecting the value of the number. The 0’s to the left of the number are called lead-
ing 0’s and the 0’s to the right of the number are called trailing 0’s. The reason this is being stated is
because when a number is implemented in circuitry, the number of numerals is fixed, and each numeral
must have a value. The variable n is used to represent the number of numerals in a number. If a number
is defined with n = 4, that means 4 numerals are always used. The number 0 would be represented as
0000 with both representations having an equal value.

1.2.3 Decimal Number System (Base 10)


As mentioned earlier, the decimal number system contains ten unique numerals (0, 1, 2, 3, 4, 5, 6, 7, 8
and 9). This system is thus a base 10 or a radix 10 system. The relative magnitudes of the symbols are 0
< 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9.

1.2.4 Binary Number System (Base 2)


The binary number system contains two unique numerals (0 and 1). This system is thus a base 2 or a
radix 2 system. The relative magnitudes of the symbols are 0 < 1. At first glance, this system looks very
limited in its ability to represent large numbers due to the small number of numerals. When counting up,
as soon as you count from 0 to 1, you are out of symbols and must increment the p + 1 position in order
to represent the next number (e.g., 0, 1, 10, 11, 100, 101, etc.); however, magnitudes of each position
scale quickly so that circuits with a reasonable amount of digits can represent very large numbers. The
term bit is used instead of digit in this system to describe the individual numerals and at the same time
indicate the base of the number.
Due to the need for multiple bits to represent meaningful information, there are terms dedicated to
describing the number of bits in a group. When 4 bits are grouped together, they are called a nibble.
When 8 bits are grouped together, they are called a byte. Larger groupings of bits are called words. The
size of the word can be stated as either an n-bit word or omitted if the size of the word is inherently im-
plied. For example, if you were using a 32-bit microprocessor, using the term word would be interpreted
as a 32-bit word. For example, if there was a 32-bit grouping, it would be referred to as a 32-bit word.
The leftmost bit in a binary number is called the Most Significant Bit (MSB). The rightmost bit in a
binary number is called the Least Significant Bit (LSB).

1.2.5 Octal Number System (Base 8)


The octal number system contains eight unique numerals (0, 1, 2, 3, 4, 5, 6, 7). This system is thus a
base 8 or a radix 8 system. The relative magnitudes of the symbols are 0 < 1 < 2 < 3 < 4 < 5 < 6 < 7.
We use the generic term digit to describe the numerals within an octal number.

1.2.6 Hexadecimal Number System (Base 16)


The hexadecimal number system contains 16 unique numerals. This system is most often referred to in
spoken word as hex for short. Since we only have ten numerals in our familiar decimal system, we need
to use other symbols to represent the remaining six numerals. We use the alphabetic characters A-F in
order to expand the system to 16 numerals. The 16 numerals in the hexadecimal system are 0, 1, 2, 3, 4,
5, 6, 7, 8, 9, A, B, C, D, E, and F. The relative magnitudes of the symbols are 0 < 1 < 2 < 3 < 4 < 5

10
< 6 < 7 < 8 < 9 < A < B < C < D < E < F. We use the generic term digit to describe the numerals
within a hexadecimal number.
At this point, it becomes necessary to indicate the base of a written number. The number 10 has an
entirely different value if it is a decimal number or binary number. In order to handle this, a subscript
is typically included at the end of the number to denote its base. For example, 1010 indicates that this
number is decimal "ten". If the number was written as 102 , this number would represent binary "one
zero." Table 1.2 lists the equivalent values in each of the four number systems just described for counts
from 010 to 1510. The left side of the table does not include leading 0’s. The right side of the table
contains the same information but includes the leading zeros. The equivalencies of decimal, binary, and
hexadecimal in this table are typically committed to memory.

Decimal Binary Octal Hexadecimal


00 0000 00 0
01 0001 01 1
02 0010 02 2
03 0011 03 3
04 0100 04 4
05 0101 05 5
06 0110 06 6
07 0111 07 7
08 1000 10 8
09 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F

Table 1.2: Equivalency between different number systems.

In-class Question 3: The base of a number system is arbitrary and is commonly selected to match a
particular aspect of the physical system in which it is used (e.g., base 10 corresponds to our ten fingers;
base 2 corresponds to the two states of a switch). If a physical system contained three unique modes and
a base of 3 was chosen for the number system, what is the base 3 equivalent of the decimal number 3?
[5min]
1. 310 = 113
2. 310 = 33
3. 310 = 103
4. 310 = 213

1.2.7 Base Conversion


Now we look at converting between bases. There are distinct techniques for converting to and from
decimal. There are also techniques for converting between bases that are powers of 2 (e.g., base 2, 4, 8,
16, etc.).

11
1.2.7.1 Converting to Decimal
The value of each digit within a number is based on the individual digit value and the digit’s position.
Each position in the number contains a different weight based on its relative location to the radix point.
The weight of each position is based on the radix of the number system that is being used. The weight
of each position in decimal is defined as:

W eight = (Radix)p (1.1)


This expression gives the number system the ability to represent fractional numbers since an expres-
sion with a negative exponent (e.g., x(−y) ) is evaluated as one over the expression with the exponent
change to positive (e.g., x1y ). Fig. 1.7 shows the generic structure of a number with its positional weight
highlighted.

Figure 1.7: Weight Definition - W eight = (Radix)p .

In order to find the decimal value of each of the numerals in the number, its individual numeral value
is multiplied by its positional weight. In order to find the value of the entire number, each value of the
individual numeral-weight products is summed. The generalized format of this conversion is written as:
pmax
X
T otal Decimal V alue = di .(radix)i (1.2)
i=pmin

In this expression, pmax represents the highest position number that contains a numeral greater than
0. The variable pmin represents the lowest position number that contains a numeral greater than 0. These
limits are used to simplify the hand calculations; however, these terms theoretically could be +∞ to
−∞ with no effect on the result since the summation of every leading 0 and every trailing 0 contributes
nothing to the result.
As an example, let’s evaluate this expression for a decimal number. The result will yield the original
number but will illustrate how positional weight is used. Let’s take the number 132.65410 . To find the
decimal value of this number, each numeral is multiplied by its positional weight, and then all of the
products are summed. The positional weight for the digit 1 is (radix)p or (10)2 . In decimal this is called
the hundred’s position. The positional weight for the digit 3 is (10)1 , referred to as the ten’s position.
The positional weight for digit 2 is (10)0 , referred to as the one’s position. The positional weight for
digit 6 is (10)−1 , referred to as the tenth’s position. The positional weight for digit 5 is (10)−2 , referred
to as the hundredth’s position. The positional weight for digit 4 is (10)−3 , referred to as the thousandth’s
position. When these weights are multiplied by their respective digits and summed, the result is the
original decimal number 132.65410 . Fig. 1.8 shows this process step-by-step.

12
Figure 1.8: Convert 132.65410 to Decimal.

This process is used to convert between any other base to decimal.

1.2.7.2 Binary to Decimal


Let’s convert 101.112 to decimal. The same process is followed with the exception that the base in the
summation is changed to 2. Converting from binary to decimal can be accomplished quickly in your
head due to the fact that the bit values in the products are either 1 or 0. That means any bit that is a 0 has
no impact on the outcome and any bit that is a 1 simply yields the weight of its position. Fig. 1.9 shows
the step-by-step process converting a binary number to decimal.

13
Figure 1.9: Convert 101.112 to Decimal.

1.2.7.3 Octal to Decimal


When converting from octal to decimal, the same process is followed with the exception that the base in
the weight is changed to 8. Fig. 1.10 shows an example of converting an octal number to decimal.

Figure 1.10: Convert 17.178 to Decimal.

14
1.2.7.4 Hexadecimal to Decimal
Let’s convert 1AB.EF16 to decimal. The same process is followed with the exception that the base is
changed to 16. When performing the conversion, the decimal equivalent of the numerals A-F needs to
be used. Fig. 1.11 shows the step-by-step process converting a hexadecimal number to decimal.

Figure 1.11: Convert 1AB.EF16 to Decimal.

In some cases, it is desired to specify a level of accuracy for the conversion in order to bound the
number of fractional digits in the final result. For example, if the conversion in Fig. 1.11 was stated as
"convert 1AB.EF16 to decimal with a fractional accuracy of 2 digits", the final result would be 427.9310 .
How rounding is handled can also be specified with the two options being with or without rounding.
In the case where the conversion is performed with rounding, additional fractional digits may need to
be computed to determine if the least significant digit of the new decimal fraction needs to be altered.
For example, let’s say the conversion in Fig. 1.11 is stated as "convert 1AB.EF16 to decimal with a
fractional accuracy of 4 digits with rounding". In this case, the final result would be 427.933610 . Notice
how rounding was applied to the digit in position p = −3 changing it from a 5 to a 6 based on the
value in position p = −4. Now let’s say the conversion in Fig. 1.11 is stated as "convert 1AB.EF16 to
decimal with a fractional accuracy of 4 digits without rounding." In this case, the final result would be
427.93351 0. Notice how without rounding simply drops all of the digits beyond the specified level of
accuracy.

1.2.7.5 Decimal to Binary


Let’s convert 11.37510 to binary. Fig. 1.12 shows the step-by-step process converting a decimal number
to binary.

15
Figure 1.12: Convert 11.37510 to Binary.

Many times when converting to binary, the number of fractional bits that result from the conversion
is more than which is needed. In this case, rounding is applied to limit the fractional accuracy. The sim-
plest rounding approach for binary numbers is to continue the conversion for one more bit beyond the
desired fractional accuracy. If the next bit is a 0, then you leave the fractional component of the number
as is. If the next bit is a 1, you round the least significant bit of your number up. Often this rounding will
result in a cascade of roundings from the LSB to the MSB. As an example, let’s say that the conversion
in Fig. 1.12 was specified to have a fractional accuracy of 2 bits. If the bit in position p = −3 was a 0
(which it is not, but let’s just say it is for the sake of this example), then the number would be left as is,
and the final converted number would be 1011.012 . However, if the bit in position p = −3 was a 1 (as it
actually is in Fig. 1.12), then we would need to apply rounding. We would start with the bit in position
p = −3. Since it is a 1, we would round that up to a 0, but we would need to apply the overflow of this
rounding to the next higher-order bit in position p = −1. That would then cause the value of p = −1 to
go from a 0 to a 1. The final result of the conversion with rounding would be 1011.102 .

1.2.7.6 Decimal to Octal


Let’s convert 10.410 to octal with an accuracy of 4 fractional digits. When converting the fractional
component of the number, the algorithm is continued until 4 digits worth of fractional numerals have
been achieved. Once the accuracy has been achieved, the conversion is finished even though a product

16
with a zero fractional value has not been obtained. Fig. 1.13 shows the step-by-step process converting
a decimal number to octal with a fractional accuracy of 4 digits.

Figure 1.13: Convert 10.410 to Octal.

Rounding of octal digits uses a similar approach as when rounding decimal numbers, with the ex-
ception that the middle of the range of the numbers lies between digits 38 and 48 . This means that any
number to be rounded that is 48 or greater will be rounded up. Numbers that are 38 or less will be rounded
down, which means the fractional component of the converted number is left as in.

1.2.7.7 Decimal to Hexadecimal


Let’s convert 254.65510 to hexadecimal with an accuracy of 3 fractional digits. When doing this conver-
sion, all of the divisions and multiplications are done using decimal. If the results end up between 1010
and 1510 , then the decimal numbers are substituted with their hex symbol equivalent (i.e., A to F). Fig.
1.14 shows the step-by-step process of converting a decimal number to hex with a fractional accuracy of
3 digits.

17
Figure 1.14: Convert 254.65510 to Hexadecimal.

Rounding of hexadecimal digits uses a similar approach as when rounding decimal numbers, with
the exception that the middle of the range of the numbers lies between digits 716 and 816 . This means
that any number to be rounded that is 816 or greater will be rounded up. Numbers that are 716 or less will
be rounded down, which means the fractional component of the converted number is left as in.

1.2.7.8 Converting Between 2n Bases


Converting between 2n bases (e.g., 2, 4, 8, 16, etc.) takes advantage of the direct mapping that each of
these bases has back to binary. Base 8 numbers take exactly 3 binary bits to represent all 8 symbols (i.e.,
08 = 0002 , 78 = 1112 ). Base 16 numbers take exactly 4 binary bits to represent all 16 symbols (i.e.,
016 = 00002 , F16 = 11112 ).
When converting from binary to any other 2n base, the whole number bits are grouped into the
appropriate-sized sets starting from the radix point and working left. If the final leftmost grouping
does not have enough symbols, it is simply padded on left with leading 0’s. Each of these groups is
then directly substituted with their 2n base symbol. The fractional number bits are also grouped into
the appropriate sized sets starting from the radix point, but this time working right. Again, if the final

18
rightmost grouping does not have enough symbols, it is simply padded on the right with trailing 0’s.
Each of these groups is then directly substituted with their 2n base symbol.

1.2.7.9 Binary to Octal


Fig. 1.15 shows the step-by-step process of converting a binary number to octal.

Figure 1.15: Convert 10111.012 to Octal.

1.2.7.10 Binary to Hexadecimal


Fig. 1.16 shows the step-by-step process of converting a binary number to hexadecimal.

19
Figure 1.16: Convert 111011.111112 to Hexadecimal.

1.2.7.11 Octal to Binary


When converting to binary from any 2n base, each of the symbols in the originating number are replaced
with the appropriate-sized number of bits. An octal symbol will be replaced with 3 binary bits, while
a hexadecimal symbol will be replaced with 4 binary bits. Any leading or trailing 0’s can be removed
from the converted number once complete. Fig. 1.17 shows the step-by-step process of converting an
octal number to binary.

20
Figure 1.17: Convert 347.128 to Binary.

1.2.7.12 Hexadecimal to Binary


Fig. 1.18 shows the step-by-step process of converting a hexadecimal number to binary.

Figure 1.18: Convert 1.BA16 to Binary.

1.2.7.13 Octal to Hexadecimal


When converting between 2n bases (excluding binary), the number is first converted into binary and then
converted from binary into the final 2n base using the algorithms described before. Fig. 1.19 shows the
step-by-step process of converting an octal number to hexadecimal.

21
Figure 1.19: Convert 71.88 to Hexadecimal.

1.2.7.14 Hexadecimal to Octal


Fig. 1.20 shows the step-by-step process of converting a hexadecimal number to octal.

Figure 1.20: Convert AB.C16 to Octal.

22
In-class Question 4: A "googol" is the term for the decimal number 1e100. When written out manu-
ally, this number is a 1 with 100 zeros after it (e.g., 10,000,000,000,000,000,000,000,000,000,000,000,
000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000).
This term is more commonly associated with the search engine company Google, which uses a
different spelling but is pronounced the same. How many bits does it take to represent a googol in
binary? [15min]

1. 100 bits

2. 256 bits

3. 332 bits

4. 333 bits

1.3 Binary Arithmetic


1.3.1 Addition (Carries)
Binary addition is a straightforward process that mirrors the approach we have learned for longhand
decimal addition. The two numbers (or terms) to be added are aligned at the radix point, and addition
begins at the least significant bit. If the sum of the least significant position yields a value with 2 bits
(e.g., 102 ), then the least significant bit is recorded, and the most significant bit is carried to the next
higher position. The sum of the next higher position is then performed including the potential carry bit
from the prior addition. This process continues from the least significant position to the most significant
position.
Fig. 1.21 shows how addition is performed on two individual bits.

Figure 1.21: Single Bit Binary Addition.

When performing binary addition, the width of the inputs and output is fixed (i.e., n-bits). Carries
that exist within the n-bits are treated in the normal fashion of including them in the next higher position
sum; however, if the highest position summation produces a carry, this is a uniquely named event. This
event is called a carry out or the sum is said to generate a carry. The reason this type of event is given
special terminology is because in real circuitry, the number of bits of the inputs and output is fixed in
hardware and the carry out is typically handled by a separate circuit. Fig. 1.22 shows this process when
adding two 4-bit numbers. What is the sum of 1010.12 and 1110.12 ? Did this addition generate a carry?

23
Figure 1.22: Multiple-bit binary addition.

The largest decimal sum that can result from the addition of two binary numbers is given by 2.(2n −1).
For example, two 8-bit numbers to be added could both represent their highest decimal value of (2n − 1)
or 25510 (i.e., 1111 11112 ). The sum of this number would result in 51010 or (1 1111 11102 ). Notice that
the largest sum achievable would only require one additional bit. This means that a single carry bit is
sufficient to handle all possible magnitudes for binary addition.

1.3.2 Subtraction (Borrows)


Binary subtraction also mirrors longhand decimal subtraction. In subtraction, the formal terms for the
two numbers being operated on are minuend and subtrahend. The subtrahend is subtracted from the min-
uend to find the difference. In longhand subtraction, the minuend is the top number and the subtrahend
is the bottom number. For a given position, if the minuend is less than the subtrahend, it needs to borrow
from the next higher-order position to produce a difference that is positive. If the next higher position
does not have a value that can be borrowed from (i.e., 0), then it in turn needs to borrow from the next
higher position, and so forth.
Fig. 1.23 shows how subtraction is performed on two individual bits.

Figure 1.23: Single-bit binary subtraction.

As with binary addition, binary subtraction is accomplished on fixed widths of inputs and outputs
(i.e., n-bits). The minuend and subtrahend are aligned at the radix point, and subtraction begins at the

24
least significant bit position. Borrows are used as necessary as the subtractions move from the least
significant position to the most significant position. If the most significant position requires a borrow,
this is a uniquely named event. This event is called a borrow in or the subtraction is said to require a
borrow. Again, the reason this event is uniquely named is because in real circuitry, the number of bits
of the input and output is fixed in hardware and the borrow in is typically handled by a separate circuit.
Fig. 1.24 shows this process when subtracting two 4-bit numbers.

Figure 1.24: Multiple-bit binary subtraction.

Notice that if the minuend is less than the subtrahend, then the difference will be negative. At this
point, we need a way to handle negative numbers.
In-class Question 5: If an 8-bit computer system can only perform unsigned addition on 8-bit inputs
and produce an 8-bit sum, how is it possible for this computer to perform addition on numbers that are
larger than what can be represented with 8 bits (e.g., 100010 + 100010 = 200010 )? [5min]

1. There are multiple 8-bit adders in a computer to handle large numbers.

2. The result is simply rounded to the nearest 8-bit number.

3. The computer returns an error and requires smaller numbers to be entered.

4. The computer keeps track of the carry out and uses it in a subsequent 8-bit addition, which enables
larger numbers to be handled.

1.4 Unsigned and Signed Numbers


All of the number systems presented in the prior sections were positive. We need to also have a mech-
anism to indicate negative numbers. When looking at negative numbers, we only focus on the mapping
between decimal and binary since octal and hexadecimal are used as just another representation of a
binary number. In decimal, we are able to use the negative sign in front of a number to indicate it is neg-
ative (e.g., −3410 ). In binary, this notation works fine for writing numbers on paper (e.g., −10102 ), but
we need a mechanism that can be implemented using real circuitry. In a real digital circuit, the circuits
can only deal with 0’s and 1’s. There is no "-" in a digital circuit. Since we only have 0’s and 1’s in the
hardware, we use a bit to represent whether a number is positive or negative. This is referred to as the
sign bit. If a binary number is not going to have any negative values, then it is called an unsigned num-
ber, and it can only represent positive numbers. If a binary number is going to allow negative numbers,

25
it is called a signed number. It is important to always keep track of the type of number we are using
as the same bit values can represent very different numbers depending on the coding mechanism that is
being used.

1.4.1 Unsigned Numbers


An unsigned number is one that does not allow negative numbers. When talking about this type of
code, the number of bits is fixed and stated up front. We use the variable n to represent the number of
bits in the number. For example, if we had an 8-bit number, we would say, "This is an 8-bit, unsigned
number".
The number of unique codes in an unsigned number is given by 2n . For example, if we had an 8-bit
number, we would have 28 or 256 unique codes (e.g., 0000 00002 to 1111 11112 ).
The range of an unsigned number refers to the decimal values that the binary code can represent. If
we use the notation Nunsigned to represent any possible value that an n-bit, unsigned number can take on,
the range would be defined as 0 < Nunsigned < (2n − 1).
For example, if we had an unsigned number with n = 4, it could take on a range of values from
+010 (00002 ) to +1510 (11112 ). Notice that while this number has 16 unique possible codes, the highest
decimal value it can represent is 1510 . This is because one of the unique codes represents 010 . This is the
reason that the highest decimal value that can be represented is given by (2n − 1). Fig. 1.25 shows this
process for a 16-bit number.

Figure 1.25: Finding the range of an unsigned number.

1.4.2 Signed Numbers


Signed numbers are able to represent both positive and negative numbers. The most significant bit of
these numbers is always the sign bit, which represents whether the number is positive or negative. The
sign bit is defined to be a 0 if the number is positive and 1 if the number is negative. When using signed
numbers, the number of bits is fixed so that the sign bit is always in the same position. There are a
variety of ways to encode negative numbers using a sign bit. The encoding method used exclusively in
modern computers is called two’s complement. There are two other encoding techniques called signed

26
magnitude and one’s complement that are rarely used but are studied to motivate the power of two’s
complement. When talking about a signed number, the number of bits and the type of encoding are
always stated. For example, we would say, "This is an 8-bit, two’s complement number."

1.4.2.1 Signed Magnitude


Signed magnitude is the simplest way to encode a negative number. In this approach, the most signifi-
cant bit (i.e., leftmost bit) of the binary number is considered the sign bit (0 = positive, 1 = negative).
The rest of the bits to the right of the sign bit represent the magnitude or absolute value of the number.
As an example of this approach, let’s look at the decimal values that a 4-bit, signed magnitude number
can take on. These are shown in Fig. 1.26.

Figure 1.26: Decimal values that a 4-bit, signed magnitude code can represent.

There are drawbacks of signed magnitude encoding that are apparent in Fig. 1.26. First, the value
of 010 has two signed magnitude codes (00002 and 10002 ). This is an inefficient use of the available
codes and leads to complexity when building arithmetic circuitry since it must account for two codes
representing the same number.
The second drawback is that addition using the negative numbers does not directly map to how dec-
imal addition works. For example, in decimal if we added (-5) + (1), the result would be -4. In signed
magnitude, adding these numbers using a traditional adder would produce (-5) + (1) = (-6). This is
because the traditional addition would take place on the magnitude portion of the number. A 510 is
represented with 1012 . Adding 1 to this number would result in the next higher binary code 1102 or 610 .
Since the sign portion is separate, the addition is performed on |5|, thus yielding 6. Once the sign bit

27
is included, the resulting number is -6. It is certainly possible to build an addition circuit that works on
signed magnitude numbers, but it is more complex than a traditional adder because it must perform a
different addition operation for the negative numbers versus the positive numbers. It is advantageous to
have a single adder that works across the entire set of numbers. Due to the duplicate codes for 0, the
range of decimal numbers that signed magnitude can represent is reduced by 1 compared to unsigned
encoding. For an n-bit number, there are 2n unique binary codes available, but only 2n − 1 can be used
to represent unique decimal numbers. If we use the notation NSM to represent any possible value that an
n-bit, signed magnitude number can take on, the range would be defined as:

Range of a SIGN ED M AGN IT U DE number : −(2n−1 − 1) ≤ NSM ≤ +(2n−1 − 1) (1.3)

Fig. 1.27 shows how to use this expression to find the range of decimal values that an 8-bit, signed
magnitude code can represent.

Figure 1.27: Finding the range of a signed magnitude number.

The process to determine the decimal value from a signed magnitude binary code involves treat-
ing the sign bit separately from the rest of the code. The sign bit provides the polarity of the decimal
number (0 = positive, 1 = negative). The remaining bits in the code are treated as unsigned numbers
and converted to decimal using the standard conversion procedure described in the prior sections. This
conversion yields the magnitude of the decimal number. The final decimal value is found by applying
the sign. Fig. 1.28 shows an example of this process.

28
Figure 1.28: Finding the range of a signed magnitude number.

1.4.2.2 One’s Complement


One’s complement is another simple way to encode negative numbers. In this approach, the negative
number is obtained by taking its positive equivalent and flipping all of the 1’s to 0’s and 0’s to 1’s. This
procedure of flipping the bits is called a complement. In this way, the most significant bit of the number
is still the sign bit (0 = positive, 1 = negative). The rest of the bits represent the value of the number, but
in this encoding scheme, the negative number values are less intuitive. As an example of this approach,
let’s look at the decimal values that a 4-bit, one’s complement number can take on. These are shown in
Fig. 1.29.

29
Figure 1.29: Decimal values that a 4-bit, one’s complement code can represent.

Again, we notice that there are two different codes for 010 (00002 and 11112 ). This is a drawback of
one’s complement because it reduces the possible range of numbers that can be represented from 2n to
(2n −1) and requires arithmetic operations that take into account the gap in the number system. There are
advantages of one’s complement, however. First, the numbers are ordered such that traditional addition
works on both positive and negative numbers (excluding the double 0 gap). Taking the example of (-5)
+ (1) again, in one’s complement the result yields +4, just as in a traditional decimal system. Notice
in one’s complement, −510 is represented with 10102 . Adding 1 to this entire binary code would result
in the next higher binary code 10112 or −410 from the above table. This makes addition circuitry less
complicated, but still not as simple as if the double 0 gap was eliminated. Another advantage of one’s
complement is that as the numbers are incremented beyond the largest value in the set, they roll over and
start counting at the lowest number. For example, if you increment the number 01112 (710 ), it goes to
the next higher binary code 10002 , which is −710 . The ability to have the numbers roll over is a useful
feature for computer systems.
If we use the notation N10 scomp to represent any possible value that an n-bit, one’s complement
number can take on, the range is defined as:

Range of a ON E 0 s COM P LEM EN T number : −(2n−1 − 1) ≤ N10 scomp ≤ +(2n−1 − 1) (1.4)

Fig. 1.30 shows how to use this expression to find the range of decimal values that a 24-bit, one’s
complement code can represent.

30
Figure 1.30: Finding the range of a 1’s complement number

The process of finding the decimal value of a one’s complement number involves first identifying
whether the number is positive or negative by looking at the sign bit. If the number is positive (i.e.,
the sign bit is 0), then the number is treated as an unsigned code and is converted to decimal using the
standard conversion procedure described in prior sections. If the number is negative (i.e., the sign bit is
1), then the number sign is recorded separately, and the code is complemented in order to convert it to its
positive magnitude equivalent. This new positive number is then converted to decimal using the standard
conversion procedure. As the final step, the sign is applied. Fig. 1.31 shows an example of this process.

Figure 1.31: Finding the decimal value of a 1’s complement number.

31
1.4.3 Two’s Complement
Two’s complement is an encoding scheme that addresses the double 0 issue in signed magnitude and 1’s
complement representations. In this approach, the negative number is obtained by subtracting its positive
equivalent from 2n . This is identical to performing a complement on the positive equivalent and then
adding one. If a carry is generated, it is discarded. This procedure is called taking the two’s complement
of a number. The procedure of complementing each bit and adding one is the most common technique to
perform a two’s complement. In this way, the most significant bit of the number is still the sign bit (0 =
positive, 1 = negative), but all of the negative numbers are in essence shifted up so that the double 0 gap
is eliminated. Taking the two’s complement of a positive number will give its negative counterpart and
vice versa. Let’s look at the decimal values that a 4-bit, two’s complement number can take on. These
are shown in Fig. 1.32.

Figure 1.32: Decimal values that a 4-bit, two’s complement code can represent.

There are many advantages of two’s complement encoding. First, there is no double 0 gap, which
means that all possible 2n unique codes that can exist in an n-bit number are used. This gives the largest
possible range of numbers that can be represented. Another advantage of two’s complement is that addi-
tion with negative numbers works exactly the same as decimal. In our example of (-5) + (1), the result is
(-4). Arithmetic circuitry can be built to mimic the way our decimal arithmetic works without the need
to consider the double 0 gap. Finally, the roll over characteristic is preserved from one’s complement.
Incrementing +7 by +1 will result in -8. If we use the notation N2comp to represent any possible value
that an n-bit, two’s complement number can take on, the range is defined as:

32
Range of a T W O0 S COM P LEM EN T number : −(2n−1 ) ≤ N2comp ≤ +(2n−1 − 1) (1.5)

Fig. 1.33 shows how to use this expression to find the range of decimal values that a 32-bit, two’s
complement code can represent.

Figure 1.33: Finding the range of a two’s complement number.

The process of finding the decimal value of a two’s complement number involves first identifying
whether the number is positive or negative by looking at the sign bit. If the number is positive (i.e.,
the sign bit is 0), then the number is treated as an unsigned code and is converted to decimal using the
standard conversion procedure described in prior sections. If the number is negative (i.e., the sign bit
is 1), then the number sign is recorded separately, and a two’s complement is performed on the code in
order to convert it to its positive magnitude equivalent. This new positive number is then converted to
decimal using the standard conversion procedure. The final step is to apply the sign. Fig. 1.34 shows an
example of this process.

33
Figure 1.34: Finding the decimal value of a two’s complement number.

To convert a decimal number into its two’s complement code, the range is first checked to determine
whether the number can be represented with the allocated number of bits. The next step is to convert
the decimal number into unsigned binary. The final step is to apply the sign bit. If the original decimal
number was positive, then the conversion is complete. If the original decimal number was negative, then
the two’s complement is taken on the unsigned binary code to find its negative equivalent. Fig. 1.35
shows this procedure when converting −9910 to its 8-bit, two’s complement code.

34
Figure 1.35: Finding the two’s complement code of a decimal number.

1.4.3.1 Arithmetic with Two’s Complement


Two’s complement has a variety of arithmetic advantages. First, the operations of addition, subtrac-
tion, and multiplication are handled exactly the same as when using unsigned numbers. This means
that duplicate circuitry is not needed in a system that uses both number types. Second, the ability to
convert a number from positive to its negative representation by performing a two’s complement means
that an adder circuit can be used for subtraction. For example, if we wanted to perform the subtraction

35
1310 − 410 = 910 , this is the same as performing 1310 + (−410 ) = 910 . This allows us to use a single
adder circuit to perform both addition and subtraction as long as we have the ability to take the two’s
complement of a number. Creating a circuit to perform two’s complement can be simpler and faster than
building a separate subtraction circuit, so this approach can sometimes be advantageous.
There are specific rules for performing two’s complement arithmetic that must be followed to en-
sure proper results. First, any carry or borrow that is generated is ignored. The second rule that must
be followed is to always check if two’s complement overflow occurred. Two’s complement overflow
refers to when the result of the operation falls outside of the range of values that can be represented by
the number of bits being used. For example, if you are performing 8-bit, two’s complement addition,
the range of decimal values that can be represented is −12810 to +12710 . Having two input terms of
12710 (0111 11112 ) is perfectly legal because they can be represented by the 8 bits of the two’s comple-
ment number; however, the summation of 12710 + 12710 = 25410 (1111 11102 ). This number does not fit
within the range of values that can be represented and is actually the two’s complement code for −210 ,
which is obviously incorrect. Two’s complement overflow occurs if any of the following occurs:

• The sum of like signs results in an answer with opposite sign (i.e., positive + positive = negative
or negative + negative = positive) like for a 4-bit number: (+7) + (+2) = -7 ← Wrong result as it is
overflowed:

0111
+ 0010

1001

The right answer of (+7) + (+2) is (+9), but +9 cannot be fit into 4-bit (therefore, it overflows)!

• The subtraction of a positive number from a negative number results in a positive number (i.e.,
negative – positive = positive) like for a 4-bit number: (-8) - (+2) = +6 ← Wrong result as it
is overflowed (Remember to convert all subtraction to addition as digital circuits do not have
subtraction circuit!):

1000
− 0010

1000
+ 1110

0110

The right answer of (-8) - (+2) is (-10), but -10 cannot be fit into 4-bit (therefore, it overflows)!

• The subtraction of a negative number from a positive number results in a negative number (i.e.,
positive – negative = negative) like for a 4-bit number: (+1) - (-7) = -6 ← Wrong result as it
is overflowed (Remember to convert all subtraction to addition as digital circuits do not have

36
subtraction circuit!):

0001
− 0111

0001
+ 1001

1010

The right answer of (+1) - (-7) is (+8), but +8 cannot be fit into 4-bit (therfore, it overflows)!

Computer systems that use two’s complement have a dedicated logic circuit that monitors for any of
these situations and lets the operator know that overflow has occurred. These circuits are straightforward
since they simply monitor the sign bits of the input and output codes. Fig. 1.36 shows how to use two’s
complement in order to perform subtraction using an addition operation.

37
Figure 1.36: Two’s complement addition.

In-class Question 6: A 4-bit, two’s complement number has 16 unique codes and can represent
decimal numbers between −810 and +710 . If the number of unique codes is even, why is it that the range
of integers it can represent is not symmetrical about zero?

1. One of the positive codes is used to represent zero. This prevents the highest positive number from
reaching +810 and being symmetrical.

2. It is asymmetrical because the system allows the numbers to roll over.

38
3. It isn’t asymmetrical if zero is considered a positive integer. That way there are eight positive
numbers and eight negatives numbers.

4. It is asymmetrical because there are duplicate codes for 0.

1.5 Assignments
1. What is the radix of the binary number system? What is the radix of the decimal number system?
What is the radix of the hexadecimal number system?

2. For the number 261.367, what position (p) is the number 2 in? what position (p) is the number
leftmost 6 in? what position (p) is the number 7 in?

3. What is the name of the number system containing 102 ? What is the name of the number system
containing 1010 ? What is the name of the number system containing 1016 ? What is the name of
the number system containing 108 ?

4. Which of the four number systems covered in week 0 (i.e., binary, decimal, hexadecimal, and
octal) could the number 22 be part of? Give all that are possible. Which of the four number
systems (i.e., binary, decimal, hexadecimal, and octal) could the number 1F be part of? Give all
that are possible.

5. If the number 101.111 has a radix of 2, what is the weight of the position containing the leftmost
1? what is the weight of the position containing the rightmost 1?

6. If the number 261.367 has a radix of 10, what the weight of the position containing the numeral
2? what is the weight of the position containing the numeral 7?

7. If the number 261.367 has a radix of 16, what is the weight of the position containing the numeral
3? what is the weight of the position containing the numeral 7?

8. Convert 1100 11002 to decimal. Treat all numbers as unsigned.

9. Convert 0.11112 to decimal. Provide the full answer without limiting its accuracy or rounding.
Treat all numbers as unsigned.

10. Convert 0.11112 to decimal with a fractional accuracy of 2 digits without rounding. Treat all
numbers as unsigned.

11. Convert 1001.10012 to decimal with a fractional accuracy of 3 digits with rounding. Treat all
numbers as unsigned.

12. Convert 728 to decimal. Treat all numbers as unsigned.

13. Convert 0.7778 to decimal. Provide the full answer without limiting its accuracy or rounding. Treat
all numbers as unsigned.

14. Convert F ACE16 to decimal. Treat all numbers as unsigned.

15. Convert 0.F F16 to decimal with a fractional accuracy of 4 digits without rounding. Treat all
numbers as unsigned.

39
16. Convert 0.F F16 to decimal with a fractional accuracy of 4 digits with rounding. Treat all numbers
as unsigned.

17. Convert 6710 to binary. Treat all numbers as unsigned.

18. Convert 31.6562510 to binary with a fractional accuracy of 3 bits without rounding. Treat all
numbers as unsigned.

19. Convert 6710 to octal. Treat all numbers as unsigned.

20. Convert 99910 to hexadecimal. Treat all numbers as unsigned.

21. Convert 10.664062510 to hexadecimal with a fractional accuracy of 1 digit without rounding. Treat
all numbers as unsigned.

22. Convert 10.664062510 to hexadecimal with a fractional accuracy of 1 digit with rounding. Treat
all numbers as unsigned.

23. Compute 112 + 012 by hand. Treat all numbers as unsigned. Provide the 2-bit sum, and indicate
whether a carry out occurred.

24. Compute 1111 11112 + 0000 00012 by hand. Treat all numbers as unsigned. Provide the 8-bit
sum, and indicate whether a carry out occurred.

25. Compute 1010.10102 +1011.10112 by hand. Treat all numbers as unsigned. Provide the 8-bit sum,
and indicate whether a carry out occurred.

26. Compute 1111 11112 − 0000 00012 by hand. Treat all numbers as unsigned. Provide the 8-bit
difference, and indicate whether a borrow in occurred.

27. Compute 1111 1111.10112 − 0000 0001.11002 by hand. Treat all numbers as unsigned. Provide
the 12-bit difference, and indicate whether a borrow in occurred.

28. What range of decimal numbers can be represented by 8-bit, two’s complement numbers?

29. What range of decimal numbers can be represented by 16-bit, two’s complement numbers?

30. What range of decimal numbers can be represented by 32-bit, two’s complement numbers?

31. What range of decimal numbers can be represented by 64-bit, two’s complement numbers?

32. What is the 8-bit, two’s complement code for +8810 ?

33. What is the 8-bit, two’s complement code for −8810 ?

34. What is the 8-bit, two’s complement code for −110 ?

35. Compute 11102 + 10112 by hand. Treat all numbers as 4-bit, two’s complement codes. Provide
the 4-bit sum and indicate whether two’s complement overflow occurred.

36. Compute 1101 11112 + 0000 00012 by hand. Treat all numbers as 8-bit, two’s complement codes.
Provide the 8-bit sum, and indicate whether two’s complement overflow occurred.

40
37. Compute 410 − 510 using 4-bit two’s complement addition. You will need to first convert each
number into its 4-bit two’s complement code and then perform binary addition (i.e., 410+(−510)).
Provide the 4-bit result, and indicate whether two’s complement overflow occurred. Check your
work by converting the 4-bit result back to decimal.

38. Compute 6410 − 10010 using 8-bit two’s complement addition. You will need to first convert
each number into its 8-bit two’s complement code and then perform binary addition (i.e, 6410 +
(−10010 )). Provide the 8-bit result and indicate whether two’s complement overflow occurred.
Check your work by converting the 8-bit result back to decimal.

39. Compute (−99)10 − 1110 using 8-bit two’s complement addition. You will need to first convert
each decimal number into its 8-bit two’s complement code and then perform binary addition (i.e.,
(−9910 ) + (−1110 )). Provide the 8-bit result, and indicate whether two’s complement overflow
occurred. Check your work by converting the 8-bit result back to decimal.

40. Compute 5010 + 10010 using 8-bit two’s complement addition. You will need to first convert each
decimal number into its 8-bit two’s complement code and then perform binary addition. Provide
the 8-bit result, and indicate whether two’s complement overflow occurred. Check your work by
converting the 8-bit result back to decimal.

41

You might also like