This preview shows page 1. Sign up to view the full content.
Unformatted text preview: Binary Number System
Base 10 digits: 0 1 Base 2 digits: 0 15. Binary Numbers 1 1 2 3 4 5 6 7 8 9 Recall that in base 10, the digits of a number are just coefficients of powers of the base
(10):
417 = 4 * 102 + 1 * 101 + 7 * 100 Similarly, in base 2, the digits of a number are just coefficients of powers of the base (2):
1011 = 1 * 23 + 0 * 22 + 1 * 21 + 1 * 20 Any real number can be represented in any base; humans generally use base 10, but
computer hardware generally uses base 2 representation. Computer Science Dept Va Tech August, 1999 Programming in C++ ©19951999 Barnette ND, McQuain WD, Keenan MA Converting from Base 10 to Base 2 15. Binary Numbers 2 The base 10 system is also known as the decimal system; base 2 is referred to as binary.
How can we convert an integer from decimal to binary? Here is a simple algorithm:
While N > 0 Do
Write
N < N%2 // remainder when N is divided by 2 N/2 // divide N by 2 Endwhile Note that the remainder will always be either 0 or 1, a binary digit or bit. The resulting
sequence of bits is the binary representation of the integer N.
See the next slide for an example... Computer Science Dept Va Tech August, 1999 Programming in C++ ©19951999 Barnette ND, McQuain WD, Keenan MA Converting Integers 15. Binary Numbers 3 Find the binary representation of the decimal integer N = 23: Integer
23
11
5
2
1
0 Remainder
1
1
1
0
1 So the decimal integer N = 23 is represented in base 2 as: 10111
Let’s check that:
10111 =
=
= 1*24
16 +
23 Computer Science Dept Va Tech August, 1999 +
4 1*22
+2 +
+ 1*21
1 Programming in C++ + 1*20 Note: we just
shifted from
base 2 to base 10 ©19951999 Barnette ND, McQuain WD, Keenan MA Some Quick Tables 15. Binary Numbers Here are some handy facts: Power of 2
Base 2
.0001
24
.001
23
.01
22
.1
21
1
20
10
21
100
22
1000
23
10000
24
100000
25
1000000
26
27 10000000
28 100000000 Computer Science Dept Va Tech August, 1999 Base 10
.0625
.125
.25
.5
1
2
4
8
16
32
64
128
256 Programming in C++ 4 N Binary
0
0
1
1
2
10
3
11
4
100
5
101
6
110
7
111
8
1000
9
1001
10
1010
11
1011
12
1100
13
1101
14
1110
15
1111
©19951999 Barnette ND, McQuain WD, Keenan MA 15.
Converting Fractions from Base 10 to Base 2Binary Numbers 5 How can we convert a fraction from decimal to binary? Here is a simple algorithm:
While F != 0 Do
Multiply F by 2
Record the “carry” across the decimal point
F < the fractional part Endwhile Note that the carry will always be either 0 or 1, a binary digit or bit. The resulting
sequence of bits is the binary representation of the fraction F.
See the next slide for an example... Computer Science Dept Va Tech August, 1999 Programming in C++ ©19951999 Barnette ND, McQuain WD, Keenan MA Converting Fractions 15. Binary Numbers 6 Find the binary representation of the decimal fraction F = 0.3125: Carry
0
1
0
1 Fraction
.3125
.6250
.2500
.5000
.0000 So the decimal fraction F = 0.3125 is represented in base 2 as: .0101 Let’s check that:
.0101 =
=
= 1*22
.25
.3125 Computer Science Dept Va Tech August, 1999 +
+ 1*24
.0625 Programming in C++ Note: we just
shifted from
base 2 to base 10 ©19951999 Barnette ND, McQuain WD, Keenan MA Converting a General Decimal Number 15. Binary Numbers 7 A general decimal number, like 43.375, would be converted to binary by converting the
integer and fractional parts separately (as shown earlier) and combining the results.
The decimal integer 43 would be represented in binary as: Integer Remainder 43 101011 The fractional part .375 would be represented in binary as:
.011 So 43.375 would be represented in binary as:
Computer Science Dept Va Tech August, 1999 Programming in C++ Carry Fraction .375 101011.011
©19951999 Barnette ND, McQuain WD, Keenan MA Binary Representation and Precision 15. Binary Numbers 8 Of course, many decimal fractions have infinite decimal expansions. The same is true
of binary representation, but there are some (perhaps) surprising differences.
Consider the decimal fraction 0.1; how would this be represented in binary?
Carry Clearly, this pattern will now
repeat forever So 0.1 would be represented in binary as: Fraction 0
0
0
1
1
0
0
1
1
?? .1
.2
.4
.8
.6
.2
.4
.8
.6
.2
?? 0.0 0011 0011 0011 0011….
Computer Science Dept Va Tech August, 1999 Programming in C++ ©19951999 Barnette ND, McQuain WD, Keenan MA Float Representation 15. Binary Numbers So 0.1 would be represented exactly in binary as: 9 0.0 0011 0011 0011 0011…. What would actually be stored in hardware? Suppose that we have a float variable:
float x = 0.1; That’s 4
in binary A float is stored in scientific form (but in binary):
0.0 0011 0011 0011 0011…. =(1.1 0011 0011 0011….) * 2100 The exponent is stored using 7 bits and the fractional part is stored using 23 bits (with
two bits used for the signs). We cheat and don’t store the first ‘1’, so 0.1 would be
stored as:
0000100 +.1 0011 0011 0011 0011 0011 00 Exponent Mantissa (fractional part) Computer Science Dept Va Tech August, 1999 Programming in C++ ©19951999 Barnette ND, McQuain WD, Keenan MA Storage Error 15. Binary Numbers 10 So 0.1 would be stored in hardware as:
0000100 +.1 0011 0011 0011 0011 0011 00 Converting that to decimal, you have the value: 0.0999999940395355 That’s fairly close, but not quite equal to, 0.1. This is called storage error.
This is typical. Most real numbers cannot be stored exactly as floats or even as
doubles. Using a double will improve accuracy since a double stores 53 bits for the
mantissa, but there will still be some inevitable storage error. Computer Science Dept Va Tech August, 1999 Programming in C++ ©19951999 Barnette ND, McQuain WD, Keenan MA ...
View
Full
Document
 Fall '08
 SWINNEA
 Chemical Engineering

Click to edit the document details