– 1 – 52011 number systems number of symbols = base of the system most intuitive -- base 10...
TRANSCRIPT
– 1 – 52011
Number SystemsNumber Systems
Number of symbols = base of the system Most intuitive -- base 10 (decimal system)
counting on fingertipssymbols -- 0 1 2 3 4 5 6 7 8 9
Computers use base 2 (binary system)only two symbols - 0 / 1Many physical reasons for choosing
Other useful bases 8 - octal16 - hexadecimal
– 2 – 52011
Representing a number in base BRepresenting a number in base BGeneral expression :
A number U3 U2 U1 U0 in base B is effectively
U3x B3 + U2x B2 + U1 x B1 + U0 x B0
Examples : 234 in base 10 is
2 x 102 + 3 x 101 + 4 x 100
1011 in base 2 is
1 x 22 + 0 x 22
+ 1 x 21 + 1 x 20 = 1 x 101 +
1 x 100 in base 10
– 3 – 52011
Why Don’t Computers Use Base 10?Why Don’t Computers Use Base 10?Implementing Electronically
Hard to store Hard to transmit Messy to implement digital logic functions
Binary Electronic Implementation Easy to store with bistable elements Reliably transmitted on noisy and inaccurate wires Straightforward implementation of arithmetic functions
0.0V
0.5V
2.8V
3.3V
0 1 0
– 4 – 52011
Octal and hexadecimalOctal and hexadecimalOctal uses 0-7 for representing numbers
Hexadecimal uses 0-9, a, b, c, d, e and f as digits a = decimal 10, b=decimal 11 and so on
They are useful because translation from binary is easy
Consider 101100110101rewrite as 101 100 110 101 and you get 5465 in octalrewrite as 1011 0011 0101 and you get b35 in hex
Much more readable in octal and hex than in binary
Also much easier to calculate equivalent decimal value
It will really pay to learn to interpret hex numbers in this course
– 5 – 52011
Encoding Byte ValuesEncoding Byte Values
Byte = 8 bits Binary 000000002 to 111111112
Decimal: 010 to 25510
Hexadecimal 0016 to FF16
Base 16 number representationUse characters ‘0’ to ‘9’ and ‘A’ to ‘F’Write FA1D37B16 in C as 0xFA1D37B
o Or 0xfa1d37b
0 0 00001 1 00012 2 00103 3 00114 4 01005 5 01016 6 01107 7 01118 8 10009 9 1001A 10 1010B 11 1011C 12 1100D 13 1101E 14 1110F 15 1111
HexDecimal
Binary
– 6 – 52011
Machine WordsMachine Words
Machine Has “Word Size” Nominal size of integer-valued data
Including addresses Most current machines are 32 bits (4 bytes) or 64 bits
32 bits Limits addresses to 4GBBecoming too small for memory-intensive applications
High-end systems are 64 bits (8 bytes)Potentially address 1.8 X 1019 bytes
Machines support multiple data formatsFractions or multiples of word sizeAlways integral number of bytes
– 7 – 52011
Data RepresentationsData Representations
Sizes of C Objects (in Bytes) C Data Type Compaq AlphaTypical 32-bitIntel IA32
int 4 4 4long int 8 4 4char 1 1 1short 2 2 2float 4 4 4double 8 8 8long double 8 8 10/12char * 8 4 4
o Or any other pointer
– 8 – 52011
Byte OrderingByte Ordering
How should bytes within multi-byte word be ordered in memory?
Conventions Sun’s, Mac’s are “Big Endian” machines
Least significant byte has highest address Alphas, PC’s are “Little Endian” machines
Least significant byte has lowest address
– 9 – 52011
Byte Ordering ExampleByte Ordering Example
Big Endian Least significant byte has highest address
Little Endian Least significant byte has lowest address
Example Variable x has 4-byte representation 0x01234567 Address given by &x is 0x100
0x100 0x101 0x102 0x103
01 23 45 67
0x100 0x101 0x102 0x103
67 45 23 01
Big Endian
Little Endian
01 23 45 67
67 45 23 01
– 10 – 52011
Reading Byte-Reversed ListingsReading Byte-Reversed ListingsDisassembly
Text representation of binary machine code Generated by program that reads the machine code
Example Fragment Address Instruction Code Assembly Rendition 8048365: 5b pop %ebx 8048366: 81 c3 ab 12 00 00 add $0x12ab,%ebx 804836c: 83 bb 28 00 00 00 00 cmpl $0x0,0x28(%ebx)
Deciphering NumbersDeciphering Numbers Value: 0x12ab Pad to 4 bytes: 0x000012ab Split into bytes: 00 00 12 ab Reverse: ab 12 00 00
– 11 – 52011
Representing IntegersRepresenting Integers
int A = 15213;int B = -15213;long int C = 15213;
Decimal: 15213
Binary: 0011 1011 0110 1101
Hex: 3 B 6 D
6D3B0000
Linux/Alpha A
3B6D
0000
Sun A
93C4FFFF
Linux/Alpha B
C493
FFFF
Sun B
Two’s complement representation(Covered later)
00000000
6D3B0000
Alpha C
3B6D
0000
Sun C
6D3B0000
Linux C
– 12 – 52011
Representing PointersRepresenting Pointersint B = -15213;int *P = &B;
Alpha Address
Hex: 1 F F F F F C A 0
Binary: 0001 1111 1111 1111 1111 1111 1100 1010 0000
01000000
A0FCFFFF
Alpha P
Sun Address
Hex: E F F F F B 2 C Binary: 1110 1111 1111 1111 1111 1011 0010 1100
Different compilers & machines assign different locations to objects
FB2C
EFFF
Sun P
FFBF
D4F8
Linux P
Linux Address
Hex: B F F F F 8 D 4 Binary: 1011 1111 1111 1111 1111 1000 1101 0100
– 13 – 52011
Representing FloatsRepresenting Floats
Float F = 15213.0;
IEEE Single Precision Floating Point Representation
Hex: 4 6 6 D B 4 0 0 Binary: 0100 0110 0110 1101 1011 0100 0000 0000
15213: 1110 1101 1011 01Not same as integer representation, but consistent across machines
00B46D46
Linux/Alpha F
B400
466D
Sun F
Can see some relation to integer representation, but not obvious
IEEE Single Precision Floating Point Representation
Hex: 4 6 6 D B 4 0 0 Binary: 0100 0110 0110 1101 1011 0100 0000 0000
15213: 1110 1101 1011 01
IEEE Single Precision Floating Point Representation
Hex: 4 6 6 D B 4 0 0 Binary: 0100 0110 0110 1101 1011 0100 0000 0000
15213: 1110 1101 1011 01
– 14 – 52011
char S[6] = "15213";char S[6] = "15213";
Representing StringsRepresenting Strings
Strings in C Represented by array of characters Each character encoded in ASCII format
Standard 7-bit encoding of character setOther encodings exist, but uncommonCharacter “0” has code 0x30
o Digit i has code 0x30+i String should be null-terminated
Final character = 0
Compatibility Byte ordering not an issue
Data are single byte quantities Text files generally platform independent
Except for different conventions of line termination character(s)!
Linux/Alpha SSun S
3231
3135
3300
3231
3135
3300
– 15 – 52011
Boolean AlgebraBoolean AlgebraDeveloped by George Boole in 19th Century Algebraic representation of logic
Encode “True” as 1 and “False” as 0AndAnd A&B = 1 when both A=1 and B=1
NotNot ~A = 1 when A=0
OrOr A|B = 1 when either A=1 or B=1
Exclusive-Or (Xor)Exclusive-Or (Xor) A^B = 1 when either A=1 or B=1, but not both
– 16 – 52011
A
~A
~B
B
Connection when A&~B | ~A&B
Application of Boolean AlgebraApplication of Boolean AlgebraApplied to Digital Systems by Claude Shannon 1937 MIT Master’s Thesis Reason about networks of relay switches
Encode closed switch as 1, open switch as 0A&~B
~A&B = A^B
– 17 – 52011
AlgebraAlgebra
Integer Arithmetic Addition is “sum” operation Multiplication is “product” operation – is additive inverse 0 is identity for sum 1 is identity for product
Boolean Algebra {0,1}, |, &, ~, 0, 1 forms a “Boolean algebra” Or is “sum” operation And is “product” operation ~ is “complement” operation (not additive inverse) 0 is identity for sum 1 is identity for product
– 18 – 52011
CommutativityA | B = B | A A + B = B + AA & B = B & A A * B = B * A
Associativity(A | B) | C = A | (B | C) (A + B) + C = A +
(B + C)(A & B) & C = A & (B & C) (A * B) * C = A *
(B * C) Product distributes over sum
A & (B | C) = (A & B) | (A & C) A * (B + C) = A * B + B * C
Sum and product identitiesA | 0 = A A + 0 = AA & 1 = A A * 1 = A
Zero is product annihilatorA & 0 = 0 A * 0 = 0
Cancellation of negation~ (~ A) = A – (– A) = A
Boolean Algebra Boolean Algebra Integer Integer RingRing
– 19 – 52011
Boolean: Sum distributes over product
A | (B & C) = (A | B) & (A | C) A + (B * C) (A + B) * (B + C)
Boolean: IdempotencyA | A = A A + A A
“A is true” or “A is true” = “A is true”
A & A = A A * A A Boolean: Absorption
A | (A & B) = A A + (A * B) A“A is true” or “A is true and B is true” = “A is true”
A & (A | B) = A A * (A + B) A Boolean: Laws of Complements
A | ~A = 1 A + –A 1“A is true” or “A is false”
Ring: Every element has additive inverseA | ~A 0 A + –A = 0
Boolean Algebra Boolean Algebra Integer Integer RingRing
– 20 – 52011
Properties of & and ^Properties of & and ^Boolean Ring {0,1}, ^, &, , 0, 1 Identical to integers mod 2 is identity operation: (A) = A
A ^ A = 0
Property Boolean Ring Commutative sum A ^ B = B ^ A Commutative product A & B = B & A Associative sum (A ^ B) ^ C = A ^ (B ^ C) Associative product (A & B) & C = A & (B & C) Prod. over sum A & (B ^ C) = (A & B) ^ (B
& C) 0 is sum identity A ^ 0 = A 1 is prod. identity A & 1 = A 0 is product annihilator A & 0 = 0 Additive inverse A ^ A = 0
– 21 – 52011
Relations Between OperationsRelations Between Operations
DeMorgan’s Laws Express & in terms of |, and vice-versa
A & B = ~(~A | ~B)o A and B are true if and only if neither A nor B is false
A | B = ~(~A & ~B)o A or B are true if and only if A and B are not both false
Exclusive-Or using Inclusive OrA ^ B = (~A & B) | (A & ~B)
o Exactly one of A and B is trueA ^ B = (A | B) & ~(A & B)
o Either A is true, or B is true, but not both
– 22 – 52011
General Boolean AlgebrasGeneral Boolean Algebras
Operate on Bit Vectors
Operations applied bitwise
All of the Properties of Boolean Algebra Apply
01101001& 01010101 01000001
01101001| 01010101 01111101
01101001^ 01010101 00111100
~ 01010101 10101010 01000001 01111101 00111100 10101010
– 23 – 52011
Bit-Level Operations in CBit-Level Operations in COperations &, |, ~, ^ Available in C Apply to any “integral” data type
long, int, short, char View arguments as bit vectors Arguments applied bit-wise
Examples (Char data type) ~0x41 --> 0xBE
~010000012 --> 101111102
~0x00 --> 0xFF~000000002 --> 111111112
0x69 & 0x55 --> 0x41011010012 & 010101012 --> 010000012
0x69 | 0x55 --> 0x7D011010012 | 010101012 --> 011111012
– 24 – 52011
Contrast: Logic Operations in CContrast: Logic Operations in CContrast to Logical Operators &&, ||, !
View 0 as “False”Anything nonzero as “True”Always return 0 or 1Early termination
Examples (char data type) !0x41 --> 0x00 !0x00 --> 0x01 !!0x41 --> 0x01
0x69 && 0x55 --> 0x01 0x69 || 0x55 --> 0x01 p && *p (avoids null pointer access)
– 25 – 52011
Shift OperationsShift Operations
Left Shift: x << y Shift bit-vector x left y positions
Throw away extra bits on leftFill with 0’s on right
Right Shift: x >> y Shift bit-vector x right y positions
Throw away extra bits on right
Logical shiftFill with 0’s on left
Arithmetic shiftReplicate most significant bit on right
Useful with two’s complement integer representation
01100010Argument x
00010000<< 3
00011000Log. >> 2
00011000Arith. >> 2
10100010Argument x
00010000<< 3
00101000Log. >> 2
11101000Arith. >> 2
0001000000010000
0001100000011000
0001100000011000
00010000
00101000
11101000
00010000
00101000
11101000
– 26 – 52011
Cool Stuff with XorCool Stuff with Xor
void funny(int *x, int *y)void funny(int *x, int *y){{ *x = *x ^ *y; /* #1 */*x = *x ^ *y; /* #1 */ *y = *x ^ *y; /* #2 */*y = *x ^ *y; /* #2 */ *x = *x ^ *y; /* #3 */*x = *x ^ *y; /* #3 */}}
Bitwise Xor is form of addition
With extra property that every value is its own additive inverse A ^ A = 0
BABegin
BA^B1
(A^B)^B = AA^B2
A(A^B)^A = B3
ABEnd
*y*x
– 27 – 52011
Storing negative integersStoring negative integers
sign-magnitude of n bits in the word, the most significant bit is sign
1 indicates negative number, 0 a positive number remaining n-1 bits determine the magnitude 0 has two representations The range of valid values is -(2(n-1)-1) to (2(n-1)-1)
Exampleso 8 bit words can represent -127 to +127o 16 bit words can represent -32767 to +32767
AdvantagesVery straightforwardSimple to understand
Disadvantagedifferent machinery for addition and subtractionmultiple representations of zero.
– 28 – 52011
One’s complement The most significant bit is effectively sign bit The range of numbers the same as signed magnitude
Positive numbers stored as such Negative numbers are bit-wise inverted Example
4 bit storage – range -7 to +7o -7 = 1000, +7 = 0111, +3 = 0011, -4 = 1011
8 bit storage – range = -127 t0 128Zero has two representations :
o 0000 0000o 1111 1111
Hardly ever used for actual storageUseful for understanding 2’s compliment and some other operations
– 29 – 52011
Two’s ComplementTwo’s Complement
short int x = 15213; short int y = -15213;
C short 2 bytes long
Sign Bit For 2’s complement, most significant bit indicates sign
0 for nonnegative1 for negative
B2T (X ) xw 12w 1 xi 2
i
i0
w 2
B2U(X ) xi 2i
i0
w 1
Unsigned Two’s Complement
SignBit
Decimal Hex Binaryx 15213 3B 6D 00111011 01101101y -15213 C4 93 11000100 10010011
– 30 – 52011
Two’s compliment is effectively one’s compliment with a “1” added to it. It is a number’s additive inverse
Number added to its own two’s compliment results in zero
Same circuitry can do arithmetic operations for positive and negative numbers
The range is (-2n-1) to (2n-1-1)
Example : 13 + (-6)13 in 4 bit binary is 1101
6 is 0110It’s one’s complement is 1001Two’s complement is 1010
Add 1101 and 1010 in 4 bits, ignoring the carryThe answer is 0111, with carry of 1, which in decimal is 7
– 31 – 52011
Power-of-2 Multiply with ShiftOperation
u << k gives u * 2k
Both signed and unsigned
Examples u << 3 == u * 8 u << 5 - u << 3 == u * 24 Most machines shift and add much faster than multiply
• • •
0 0 1 0 0 0•••
u
2k*
u · 2kTrue Product: w+k bits
Operands: w bits
Discard k bits: w bits
UMultw(u , 2k)
•••
k
• • • 0 0 0•••
TMultw(u , 2k)
0 0 0••••••
– 32 – 52011
Unsigned Power-of-2 Divide with ShiftQuotient of Unsigned by Power of 2
u >> k gives u / 2k Uses logical shift
Division Computed Hex Binaryx 15213 15213 3B 6D 00111011 01101101x >> 1 7606.5 7606 1D B6 00011101 10110110x >> 4 950.8125 950 03 B6 00000011 10110110x >> 8 59.4257813 59 00 3B 00000000 00111011
0 0 1 0 0 0•••
u
2k/
u / 2kDivision:
Operands:•••
k••• •••
•••0 ••• •••
u / 2k •••Result:
.
Binary Point
0 •••
– 33 – 52011
Signed Power-of-2 Divide with ShiftQuotient of Signed by Power of 2
x >> k gives x / 2k Uses arithmetic shift Rounds wrong direction when u < 0
0 0 1 0 0 0•••
x
2k/
x / 2kDivision:
Operands:•••
k••• •••
•••0 ••• •••
RoundDown(x / 2k) •••Result:
.
Binary Point
0 •••
Division Computed Hex Binaryy -15213 -15213 C4 93 11000100 10010011y >> 1 -7606.5 -7607 E2 49 11100010 01001001y >> 4 -950.8125 -951 FC 49 11111100 01001001y >> 8 -59.4257813 -60 FF C4 11111111 11000100
– 34 – 52011
Correct Power-of-2 DivideQuotient of Negative Number by Power of 2
Want x / 2k (Round Toward 0) Compute as (x+2k-1)/ 2k
In C: (x + (1<<k)-1) >> kBiases dividend toward 0
Case 1: No rounding
Divisor:
Dividend:
0 0 1 0 0 0•••
u
2k/
u / 2k
•••
k
1 ••• 0 0 0•••
1 •••0 1 1••• .
Binary Point
1
0 0 0 1 1 1•••+2k +–1 •••
1 1 1•••
1 ••• 1 1 1•••
Biasing has no effect
– 35 – 52011
Correct Power-of-2 Divide (Cont.)
Divisor:
Dividend:
Case 2: Rounding
0 0 1 0 0 0•••
x
2k/
x / 2k
•••
k1 ••• •••
1 •••0 1 1••• .
Binary Point
1
0 0 0 1 1 1•••+2k +–1 •••
1 ••• •••
Biasing adds 1 to final result
•••
Incremented by 1
Incremented by 1
– 36 – 52011
Fractional Binary Numbers
Representation Bits to right of “binary point” represent fractional powers of 2 Represents rational number:
bi bi–1 b2 b1 b0 b–1 b–2 b–3 b–j• • •• • • .
124
2i–1
2i
• • •
• • •1/21/41/8
2–j
bk 2k
k j
i
– 37 – 52011
Frac. Binary Number ExamplesValue Representation
5-3/4 101.112
2-7/8 10.1112
63/64 0.1111112
Observations Divide by 2 by shifting right Multiply by 2 by shifting left Numbers of form 0.111111…2 just below 1.0
1/2 + 1/4 + 1/8 + … + 1/2i + … 1.0
– 38 – 52011
Representable NumbersLimitation
Can only exactly represent numbers of the form x/2k
Other numbers have repeating bit representations
Value Representation1/3 0.0101010101[01]…2
1/5 0.001100110011[0011]…2
1/10 0.0001100110011[0011]…2