Week 6(PowerPoint) - CS
Download
Report
Transcript Week 6(PowerPoint) - CS
1 01
10
1 01
01 1 01
How Computers Represent Data - Text Codes
•
A text code is a system that uses binary numbers (1s
and 0s) to represent characters understood by humans
(letters and numerals).
•
An early text code system, called EBCDIC, uses eightbit codes, but is used primarily in older mainframe
systems.
•
In the most common text-code set, ASCII, each
character consists of eight bits (one byte) of data.
ASCII is used in nearly all personal computers.
•
In the Unicode text-code set, each character consists of
16 bits (two bytes) of data.
Text Codes
Code
Examples from the
ASCII Text Code
Character
00110000
0
00110001
1
00110010
2
00110011
3
00110100
4
00110101
5
01000001
A
01000010
B
01000011
C
01000100
D
01000101
E
Goal: Representing Numbers in Binary
Base 10 (decimal) - Numbers are represented using 10
numerals: 0, 1, 2, 3 … 9
Base 2 (binary) - Numbers are represented using 2 numerals:
0, 1
Base 10 - Each position represents a power of 10:
101 = 1*102 + 0*101 + 1*100 = 100 + 1
110 = 1*102 + 1*101 + 0*100 = 100 + 10
Base 2 - Each position represents a power of 2: 101b = 1*22 +
0*21 + 1*20 = 100b + 1b = 4 + 1
110b = 1*22 + 1*21 + 0*20 = 100b + 10b = 4+2
Numbers in base 10 are called decimal numbers,
they are composed of 10 numerals.
d3d2d1d0 = d3*103 + d2*102 + d1*101 + d0*100
9786 = 9*1000 + 7*100 + 8*10 + 6*1
= 9*103 + 7*102 + 8*101 + 6*100
Numbers in base 2 are called binary numbers, they are composed of
the numerals 0 and 1.
b3b2b1b0 = b3*23 + b2*22 + b1*21 + b0*20
110101 = 1*32 + 1*16 + 0*8 + 1*4 + 0*2 + 1*1
= 1*25 + 1*24 + 0*23 + 1*22 + 0*21 + 1*20
1111 1111 1111 1111 = 32768 + 16384 + 8192 +
4096 +
15
2048 + 1024 + 512 + 256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 2 + 214 + … +
21 + 20 =
S 2n = 2n+1 - 1 = 216 -1
Converting from Binary to Decimal
Easy: Multiply each numeral by its exponent.
1001b = 1*23 + 1*20 = 1*8 + 1*1 = 9d
0111b = 0*23 + 1*22 + 1*21 + 1*20
= 100b + 10b + 1b
=4+2+1
=7
110110b = 1*25 + 1*24 + 0*23 + 1*22 + 1*21
= 100000b + 10000b + 100b + 10b
= 32 + 16 + 4 + 2
= 54
Converting from Binary to Decimal
Given an array that holds a 32 digit binary number called
binary:
int[] binary = {1, 0, 0, 1};
int decimal = 0;
for(int i=binary.length-1;i>=0;i--)
decimal += binary[i]*Math.pow(2,i);
The powers of 2:
20 = 1
21 = 2
24 = 16
25 = 32
28 = 256 29 = 512
211 = 2048 212 = 4096
216 = 65536
22 = 4
23 = 8
26 = 64
27 = 128
210 = 1024 = 1K
213 = 8192
220 = 1048576 = 1M
Converting From Decimal to Binary
In Java it looks like this:
int decimal = readInt();
int res;
int power;
for(int n=31; n>=0; n--){
power = (int)Math.pow(2,n);
res = decimal/power;
decimal = decimal - res*power;
System.out.print(res);
}
A Base Conversion Example
500/29 = 0 ; 500 - 0 = 500
500/28 = 1 ; 500 - 256 = 244
244/27 = 1 ; 244 - 128 = 116
116/26 = 1 ; 116 - 64 = 52
52/25 = 1 ; 52 - 32 = 20
20/24 = 1 ; 20 - 16 = 4
500d = 111110100b
4/23 = 0 ; 4 - 0 =
4/22 = 1 ; 4 - 4 =
0/21 = 0 ; 0 - 0 =
0/20 = 0 ; 0 - 0 =
4
0
0
0
Representation of Numbers
int, long, short, char - positive numbers are stored as a
binary number where the MSB (Most Significant Bit) is 0
A short is represented by 16 bits (2 bytes)
100d = 26 + 25 + 22 =
0000000001100100
An int is represented by 32 bits (4 bytes)
65545d = 216 + 23 + 20 =
00000000000000010000000000001001
A char is represented by 16 bits (2 bytes)
‘0’ = 48d = 25 + 24 =00000000 00110000
Signed and Unsigned Numbers
How do we distinguish between them?
Solution: Use 1 bit to represents the sign. The name of
this scheme is called:
sign and magnitude
10001111b = -15 00001111b = +15 (8 bit numbers)
There are several problems with this scheme:
• where do we put the sign?
• an extra step is needed to calculate the sign bit
– Add the magnitudes.
– Calculate the sign.
• there is both a positive and negative zero
10000000b = -0
00000000b = +0
Two's Complement
New Solution: Leading 0s mean positive and leading 1s
mean negative.
01111111b > 0
10000000b < 0 (8 bit numbers)
The largest positive number is:
2,147,483,647d (231 -1) = 01111…11111b
The smallest negative number is:
-2,147,483,648d (-231) = 10000…00000b
It is followed by -2,147,483,647d (1000…0001b) up to -1
(1111…1111b).
The sum of a number and its inverse is 100...0, where 1
is an overflow and is thrown away.
Two’s Complement
+3 = 00000011
+2 = 00000010
+1 = 00000001
+0 = 00000000
-1 = 11111111
-2 = 11111110
-3 = 11111101
Benefits
One representation of zero
Arithmetic works easily (see later)
Negating is fairly easy
• 3 = 00000011
• Boolean complement gives 11111100
• Add 1 to LSB
11111101
Geometric Depiction of Twos
Complement Integers
Negative Decimal to Binary
Translate the number to binary.
Flip the bits (1 -> 0, 0 -> 1)
Add 1
-100d = -01100100 = 10011011 + 1 = 10011100
-1d = - 00000001 = 11111110 + 1 = 11111111b
-128d = -10000000 = 01111111 + 1 = 10000000b
11000101b = 00111010 + 1 = 00111011 = -59d
In a short:
-25,000d = -0110000110101000 = 1001111001010111 + 1 =
10011110011000b
Conversion Between Lengths
Positive numbers pack with leading zeros
+18 =
00010010
+18 = 00000000 00010010
Negative numbers pack with leading ones
-18 =
10010010
-18 = 11111111 10010010
i.e. pack with MSB (sign bit)
Hexadecimal Numbers
Numbers in base 16 are called hexadecimal numbers,
they are composed of 16 numerals
(0-9,a-f).
9786hex = 9*163 + 7*162 + 8*161 + 6*160 =
= 9*4096 + 7*256 + 8*16 + 6*1 = 38790d
0xabcdef = 10*165 + 11*164 + 12*163 + 13*162 +
14*161 + 15*160 = 11259375d
The conversion from binary to hex is very easy, each hex digit is 4
binary digits:
0x0 = 0000 0x1 = 0001 0x2 = 0010 0x3 = 0011
0x4 = 0100 0x5 = 0101 0x6 = 0110 0x7 = 0111
0x8 = 1000 0x9 = 1001 0xa = 1010 0xb = 1011
0xc = 1100 0xd = 1101 0xe = 1110 0xf = 1111
Binary <-> Hexadecimal
Using the previous table it is easy to represent 32 bit
binary numbers in a short form:
0100 1010 0010 1101 1000 1100 0111 1001 =
4
a
2
d
8
c
7
9 =
0x4a2d8c79.
0x12390ab4 =
0001 0010 0011 1001 0000 1010 1011 0100
1
2
3
9
0
a
b
4
0xffffffff =
1111 1111 1111 1111 1111 1111 1111 1111
Every 2 Hex digits are a byte
Decimal -> Hexadecimal
Conversion from decimal to hexadecimal is similar to
converting decimal to binary.
int decimal=readInt();
int res;
int power;
for(int n=7;n>=0;n--){
power = (int)Math.pow(16,n);
res = decimal/power;
decimal = decimal - res*power;
if(res>9)
System.out.print((char)((res - 10) + 'a'));
else
System.out.print(res);
}
Octal & Hex in Java
Java allows numbers in octal (start with 0) and
hexadecimal (start with 0x or 0X).
int num1 = 015;
int num2 = 0x1a;
num1 is 13
num2 is 26
Addition
Lets
add 6 to 7:
00…00111 = 7d
00…00110 = 6d
00…01101 = 13d
Lets add 11 to 5:
00…01011 = 11d
00…00101 = 5d
00…10000 = 16d
(0)
(0)
(1)
(1)
(0)
(Carries)
0
0
0
1
1
1
0
0
0
1
1
0
(0) 0
(0) 0
(0) 1
(1) 1
(1) 0
(0) 1
Substraction
Subtraction uses addition, the operand is simply
negated before being added:
7 - 6 = 7 + (-6) =
00…00111 = 7d
11…11010 = -6d
00…00001 = 1d
Overflow
Overflow occurs when the result of a operation can't be represented by the
hardware. This can happen when we add two numbers of the same sign or
subtract two large numbers of opposing signs.
Overflow is detected by the following table:
Operation
A+B
A+B
A- B
A- B
A
B
>=0 >=0
<0 <0
>=0 <0
<0 >=0
Result
<0
>=0
<0
>=0
Multiplication
Look at the following pencil and paper example:
X
1000d
1001d
1000
0000
0000
1000
1001000d
By restricting the digits to 1 & 0 (which is binary) the
algorithm is simple, at each step:
• Place a copy of the multiplicand if the multiplier digit is 1.
• Place 0 if the digit is 0.
• The position for the next step is shifted left by one place.
Real Numbers
Numbers with fractions
Could be done in pure binary
• 1001.1010 = 24 + 20 +2-1 + 2-3 =9.625
Where is the binary point?
Fixed?
• Very limited
Moving?
• How do you show where it is?
Sign bit
Floating Point
Biased
Exponent
Significand or Mantissa
+/- .significand x 2exponent
Point is actually fixed between sign bit and body of
mantissa
Exponent indicates place value (point position)
Signs for Floating Point
Mantissa is stored in 2s compliment
Exponent is in excess or biased notation
•
•
•
•
•
e.g. Excess (bias) 128 means
8 bit exponent field
Pure value range 0-255
Subtract 128 to get correct value
Range -128 to +127
Normalization
FP numbers are usually normalized
i.e. exponent is adjusted so that leading bit (MSB) of
mantissa is 1
Since it is always 1 there is no need to store it
(c.f. Scientific notation where numbers are normalized
to give a single digit before the decimal point
e.g. 3.123 x 103)
Floating Point Examples
X
X
X
X
Expressible Numbers
IEEE 754
Standard for floating point storage
32 and 64 bit standards
8 and 11 bit exponent respectively
Extended formats (both mantissa and exponent) for
intermediate results
FP Arithmetic +/-
Check for zeros
Align significands (adjusting exponents)
Add or subtract significands
Normalize result
FP Arithmetic x/
Check for zero
Add/subtract exponents
Multiply/divide significands (watch sign)
Normalize
Round
All intermediate results should be in double length
storage