Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Binary numbers and arithmetic ADDITION Addition (decimal) 1 4 5 5 14 19 1 5 1 6 5 5 10 11 11 12 99 111 Addition (binary) 0 0 0 1 0 1 0 1 1 1 1 1 10 Addition (binary) 1 11 1 011 01 01011 11000 Addition (binary) 0 0 0 1 0 1 So can we count in binary? 0 1 1 1 1 1 10 Counting in binary (4 bits) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0000 0001 … MULTIPLICATION Multiplication (decimal) 13 11 13 130 143 Multiplication (binary) 1101 1011 1101 11010 1101000 10001111 Multiplication (binary) It’s interesting to note that binary multiplication is a sequence of shifts and adds of the first term (depending on the bits in the second term. 1101 1011 1101 11010 1101000 10001111 110100 is missing here because the corresponding bit in the second terms is 0. REPRESENTING SIGNED (POSITIVE AND NEGATIVE) NUMBERS Representing numbers (ints) • Fixed, finite number of bits. bits 8 16 32 64 bytes 1 2 4 8 C/C++ char short int or long long long Intel [s]byte [s]word [s]dword [s]qword Sun byte half word xword Representing numbers (ints) • Fixed, finite number of bits. bits 8 16 32 64 Intel [s]byte [s]word [s]dword [s]qword signed -27..+27-1 -215..+215-1 -231..+231-1 -263..+263-1 unsigned 0..+28-1 0..+216-1 0..+232-1 0..+264-1 In general, for k bits, the unsigned range is [0..+2k-1] and the signed range is [-2k-1..+2k-1-1]. Methods for representing signed ints. 1. signed magnitude 2. 1’s complement (diminished radix complement) 3. 2’s complement (radix complement) 4. excess bD-1 Signed magnitude • Ex. 4-bit signed magnitude – 1 bit for sign – 3 bits for magnitude N N 0 0000 1000 1 0001 1001 2 0010 1010 3 0011 1011 4 0100 1100 5 0101 1101 6 0110 1110 7 0111 1111 Signed magnitude • Ex. 4-bit signed magnitude – 1 bit for sign – 3 bits for magnitude N N 0 0000 1000 1 0001 1001 2 0010 1010 3 0011 1011 4 0100 1100 5 0101 1101 6 0110 1110 7 0111 1111 1’s complement (diminished radix complement) • Let x be a non-negative number. • Then –x is represented by bD-1+(-x) where b = base D = (total) # of bits (including the sign bit) • Ex. Let b=2 and D=4. Then -1 is represented by 24-1-1 = 1410 or 11102. 1’s complement (diminished radix complement) • Let x be a non-negative number. • Then –x is represented by bD-1+(-x) where b = base & D = (total) # of bits (including the sign bit) • Ex. What is the 9’s complement of 1238910? Given b=10 and D=5. Then the 9’s complement of 12389 = 105 – 1 – 12389 = 100000 – 1 – 12389 = 99999 – 12389 = 87610 1’s complement (diminished radix complement) N N • Let x be a non-negative number. 0 0000 1111 • Then –x is represented by bD1+(-x) where 1 0001 1110 b = base D = (total) # of bits (including the sign bit) • Shortcut for base 2? – All combinations used, but 2 zeros! 2 0010 1101 3 0011 1100 4 0100 1011 5 0101 1010 6 0110 1001 7 0111 1000 2’s complement (radix complement) • Let x be a non-negative number. • Then –x is represented by bD+(-x). – Ex. Let b=2 and D=4. Then -1 is represented by 241 = 15 or 11112. – Ex. Let b=2 and D=4. Then -5 is represented by 24 – 5 = 11 or 10112. – Ex. Let b=10 and D=5. Then the 10’s complement of 12389 = 105 – 12389 = 100000 – 12389 = 87611. 2’s complement (radix complement) N N • Let x be a non-negative number. • Then –x is represented by bD+(- 0 0000 0000 x). 1 0001 1111 – Ex. Let b=2 and D=4. Then -1 is represented by 24-1 = 15 or 11112. – Ex. Let b=2 and D=4. Then -5 is represented by 24 – 5 = 11 or 10112. • Shortcut for base 2? 2 0010 1110 3 0011 1101 4 0100 1100 5 0101 1011 6 0110 1010 7 0111 1001 2’s complement (radix complement) • Shortcut for base 2? – Yes! Flip the bits and add 1. N N 0 0000 0000 1 0001 1111 2 0010 1110 3 0011 1101 4 0100 1100 5 0101 1011 6 0110 1010 7 0111 1001 2’s complement (radix complement) • Are all combinations of 4 bits used? – No. (Now we only have one zero.) – 1000 is missing! • What is 1000? • Is it positive or negative? • Does -8 + 1 = -7 work in 2’s complement? N N 0 0000 0000 1 0001 1111 2 0010 1110 3 0011 1101 4 0100 1100 5 0101 1011 6 0110 1010 7 0111 1001 excess bD-1 (biased representation) • For pos, neg, and 0, x is represented by bD-1 + x • Ex. Let b=2 and D=4. Then the excess 8 (24-1) representation for 0 is 8+0 = 8 or 10002. • Ex. Let b=2 and D=4. Then excess 8 for -1 is 8 – 1 = 7 or 01112. excess bD-1 • For pos, neg, and 0, x is represented by bD-1 + x. • Ex. Let b=2 and D=4. Then the excess 8 (24-1) representation for 0 is 8+0 = 8 or 10002. • Ex. Let b=2 and D=4. Then excess 8 for -1 is 8 – 1 = 7 or 01112. N N 0 1000 1000 1 1001 0111 2 1010 0110 3 1011 0101 4 1100 0100 5 1101 0011 6 1110 0010 7 1111 0001 2’s complement vs. excess bD-1 N N • In 2’s, positives start with 0; in excess, positives start with 1. 0 1000 1000 • Both have one zero (positive). 1 1001 0111 2 1010 0110 3 1011 0101 • Remaining bits are the same. 4 1100 0100 5 1101 0011 6 1110 0010 7 1111 0001 Summary of methods for representing signed ints. signedMag 1sComp 2 sComp excess 8 N 0 n 0000 n 1000 n 1111 n 0000 n 1000 n 1000 1 0001 1001 1110 1111 0111 1001 2 3 0010 0011 1010 1011 1101 1100 1110 1101 0110 0101 1010 1011 4 5 0100 0101 1100 1101 1011 1010 1100 1011 0100 0011 1100 1101 6 7 0110 0111 1110 1111 1001 1000 1010 1001 0010 0001 1110 1111 1000=-8| 0000 unused Signed magnitude 1’s complement 2’s complement Excess K (biased) BINARY ARITHMETIC Signed magnitude BINARY ARITHMETIC Addition w/ signed magnitude algorithm • For A - B, change the sign of B and perform addition of A + (-B) (as in the next step) • For A + B: • • • • if (Asign==Bsign) then else if (|A|>|B|) then else if (|A|==|B|) then else • Complicated? { { { { R = |A| + |B|; R = |A| - |B|; R = 0; R = |B| - |A|; Rsign = Asign; Rsign = Asign; Rsign = 0; Rsign = Bsign; } } } } 2’s complement BINARY ARITHMETIC Representing numbers (ints) using 2’s complement • Fixed, finite number of bits. bits 8 16 32 64 Intel sbyte sword sdword sqword signed -27..+27-1 -215..+215-1 -231..+231-1 -263..+263-1 In general, for k bits, the signed range is [-2k-1..+2k-1-1]. So where does the extra negative value come from? Representing numbers (ints) n • Fixed, finite number of bits. bits 8 16 32 64 Intel sbyte sword sdword sqword signed -27..+27-1 -215..+215-1 -231..+231-1 -263..+263-1 In general, for k bits, the signed range is [-2k-1..+2k-1-1]. So where does the extra negative value come from? n 0 0000 0000 1 0001 1111 2 0010 1110 3 0011 1101 4 0100 1100 5 0101 1011 6 0110 1010 7 0111 1001 8 1000 Addition of 2’s complement binary numbers • Consider 8-bit 2’s complement binary numbers. – Then the msb (bit 7) is the sign bit. If this bit is 0, then this is a positive number; if this bit is 1, then this is a negative number. 1 1 1 – Addition of 2 positive numbers. – Ex. 40 + 58 = 98 0 01 01000 0 0111010 01100010 Addition of 2’s complement binary numbers • Consider 8-bit 2’s complement binary numbers. – Addition of a negative to a positive. – What are the values of these 2 terms? • -88 and 122 • -88 + 122 = 34 11 11 1 0101000 01111010 1 00100010 So how can we perform subtraction? Addition of 2’s complement binary numbers • Consider 8-bit 2’s complement binary numbers. • Subtraction is nothing but addition of the 2’s complement. – Ex. 58 – 40 = 58 + (-40) = 18 discard carry 1 1 11 0 0111010 11011000 1 00010010 Carry vs. overflow Addition of 2’s complement binary numbers • Carry vs. overflow when adding A + B – If A and B are of opposite sign, then overflow cannot occur. – If A and B are of the same sign but the result is of the opposite sign, then overflow has occurred (and the answer is therefore incorrect). • Overflow occurs iff the carry into the sign bit differs from the carry out of the sign bit. Addition of 2’s complement binary numbers #include <stdio.h> class test { public static void main ( String args[] ) { byte A = 127; byte B = 127; byte result = (byte)(A + B); System.out.println( "A + B = " + result ); } } int main ( int argc, char* argv[] ) { char A = 127; char B = 127; char result = (char)(A + B); printf( "A + B = %d \n", result ); return 0; } Result = -2 in both Java (left) and C++ (right). Why? Addition of 2’s complement binary numbers class test { public static void main ( String args[] ) { byte A = 127; byte B = 127; byte result = (byte)(A + B); System.out.println( "A + B = " + result ); } } Result = -2 in both Java and C++. Why? What’s 127 as a 2’s complement binary number? 01111111 01111111 11111110 What is 111111102? Flip the bits: 00000001. Then add 1: 00000010. This is -2. 1’s complement BINARY ARITHMETIC Addition with 1’s complement • Note: 1’s complement has two 0’s! • 1’s complement addition is tricky (end-around-carry). N N 0 0000 1111 1 0001 1110 2 0010 1101 3 0011 1100 4 0100 1011 5 0101 1010 6 0110 1001 7 0111 1000 8-bit 1’s complement addition • Ex. Let X = A816 and Y = 8616. • Calculate Y - X using 1’s complement. 8-bit 1’s complement addition • Ex. Let X = A816 and Y = 8616. • Calculate Y - X using 1’s complement. Y = 1000 01102 = -12110 X = 1010 10002 = -8710 ~X = 0101 01112 (Note: C=0 out of msb.) 1000 0110 0101 0111 1101 1101 Y - X = -121 + 87 = -34 (base 10) 8-bit 1’s complement addition • Ex. Let X = A816 and Y = 8616. • Calculate X - Y using 1’s complement. 8-bit 1’s complement addition • Ex. Let X = A816 and Y = 8616. • Calculate X - Y using 1’s complement. X = 1010 10002 = -8710 Y = 1000 01102 = -12110 ~Y = 0111 10012 (Note: C=1 out of msb.) 1010 1000 0111 1001 1 0010 0001 end around 1 carry 0010 0010 X - Y = -87 + 121 = 34 (base 10) Excess K (biased) BINARY ARITHMETIC Binary arithmetic and Excess K N (biased) Method: Simply add and then flip the sign bit. -1 +5 -+4 0111 1101 ---0100 -> flip sign -> 1100 +1 -5 --4 1001 0011 ---1100 -> flip sign -> 0100 +1 +5 -+6 1001 1101 ---0110 -> flip sign -> 1110 -1 -5 --6 0111 0011 ---1010 -> toggle sign -> 0010 N 0 1000 1000 1 1001 0111 2 1010 0110 3 1011 0101 4 1100 0100 5 1101 0011 6 1110 0010 7 1111 0001 (Not used for integer arithmetic but employed in IEEE 754 floating point standard.)