Integer arithmetic Depends what you mean by "integer" Assume at 3-bit string. Then we define zero = 000 one = 001 Use zero, one and binary addition: Zero 000 One + 001 001 Zero + one = one. Makes sense!
Add one repeatedly, use up all possible patterns: Zero 000 1 001 2 010 3 011 4 100 5 101 6 110 7 111 Called the Unsigned Integer System No negative integers!
Two additions: 2 010 + 3 + 011 5 4 100 + 5 + 101 9
Two additions: 2 010 + 3 + 011 5 101 Yes! 5 = 101 4 100 + 5 + 101 2 010 + 3 + 011 5 101 Yes! 5 = 101 4 100 + 5 + 101 9 001 9 001; 001 represents one. is 4 + 5 = 1???
Addition of unsigned integers Error detected by presence of "carry"
How do we subtract unsigned integers? We need the concept of the "Two's complement"
One's complement Take any string Invert every bit 0 1 This is One's complement "NOT"
Two's complement Given a string One's complement then add one This is called two's complement
To subtract unsigned A-B Perform A + 2's comp (B) = A + Not (B) + 1
Example: 5 101 101 - 3 - 011 + 100 2 + 1 010 3 011 011 - 5 - 101 + 010 - 2 + 1 110 =2; Good! Carry! =6; BAD! No Carry!
Subraction of unsigned integers Error detected by absence of carry! Warning: Some machines invert the carry bit on subtraction So that "carry" => Error for both add and sub
Conclusion For unsigned arithmetic we are interested in carry Pay attention! I never used the word "overflow" thats something completely different. Also notice: 3-bit operands gave 3-bit results. Don't be tempted to write that 4'th bit down!
How about negative numbers? How should we represent -1? How would we compute 0 - 1? 0 + 2's compl (1) We choose this as our "-1" 1 = 001 - 1 = 110 + 1 111
Repeatedly add -1: Zero 000 - 1 111 - 2 110 Less than - 3 101 zero - 1 111 - 2 110 Less than - 3 101 zero - 4 110 - 5 011 No! High order bit called "sign bit"
Signed 3-bit integers 3 011 2 010 1 001 0 000 -1 111 -2 110 -3 101 3 011 2 010 1 001 0 000 -1 111 -2 110 -3 101 -4 100 Not symmetrical around zero!!!
Sign bit The high order bit in a number Also called "N"-bit Value is negative when this bit is "1"
Let's try A + B 1 001 1 001 +2 010 +(-1) 111 3 011 0 *000 Both results is OK But: Left case: no carry Right case: carry Conclusion: For signed addition carry is worthless Same conclusion for signed subtraction * carry
Some additions A 1 0 0 1 2 0 1 0 +2 0 1 0 + 2 0 1 0 3 4 -1 1 1 1 -1 1 1 1 +(-3) 1 0 1 +(-4) 1 0 0 -4 -5 1 0 0 1 -2 1 1 0 +(-2) 1 1 0 +1 0 0 1 -1 -1
Some additions B 1 0 0 1 2 0 1 0 +2 0 1 0 + 2 0 1 0 3 0 1 1 4 1 0 0 -1 1 1 1 -1 1 1 1 +(-3) 1 0 1 +(-4) 1 0 0 -4 C 1 0 0 -5 C 0 1 1 1 0 0 1 -2 1 1 0 +(-2) 1 1 0 +1 0 0 1 -1 1 1 1 -1 1 1 1
Some additions C 1 0 0 1 2 0 1 0 +2 0 1 0 + 2 0 1 0 3 0 1 1 4 1 0 0 3 -4 OK BAD -1 1 1 1 -1 1 1 1 +(-3) 1 0 1 +(-4) 1 0 0 -4 C 1 0 0 -5 C 0 1 1 -4 3 1 0 0 1 -2 1 1 0 +(-2) 1 1 0 +1 0 0 1 -1 1 1 1 -1 1 1 1 -1 -1 OK OK
Some additions D 1 0 0 1 2 0 1 0 +2 0 1 0 + 2 0 1 0 3 0 1 1 4 1 0 0 3 -4 OK BAD -1 1 1 1 -1 1 1 1 +(-3) 1 0 1 +(-4) 1 0 0 -4 C 1 0 0 -5 C 0 1 1 -4 3 1 0 0 1 -2 1 1 0 +(-2) 1 1 0 +1 0 0 1 -1 1 1 1 -1 1 1 1 -1 -1 OK OK
Error during signed addition: R = A + B A, B same sign and R opposite sign called overflow Notice: Matematically, signed addition is the same as unsigned addition The same is true for signed subtraction and unsigned subtraction A - B –> A + (-B) –> A + 2's compl (B)
Some subtractions A 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 2 4 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 2 4 -1 1 1 1 1 0 0 1 - (-1) + 0 0 1 - (-1) + 0 0 1 0 2 - 3 1 0 1 - 4 1 0 0 - 1 + 1 1 1 - 1 + 1 1 1 -4 - 5
Some subtractions B 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 2 C 0 1 0 4 1 0 0 -1 1 1 1 1 0 0 1 - (-1) + 0 0 1 - (-1) + 0 0 1 0 C 0 0 0 2 0 1 0 - 3 1 0 1 - 4 1 0 0 - 1 + 1 1 1 - 1 + 1 1 1 -4 C 1 0 0 - 5 C 0 1 1
Some subtractions C 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 2 C 0 1 0 4 1 0 0 2 -4 OK BAD -1 1 1 1 1 0 0 1 - (-1) + 0 0 1 - (-1) + 0 0 1 0 C 0 0 0 2 0 1 0 0 2 OK OK - 3 1 0 1 - 4 1 0 0 - 1 + 1 1 1 - 1 + 1 1 1 -4 C 1 0 0 - 5 C 0 1 1 -4 3 OK BAD
Some subtractions D 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 2 C 0 1 0 4 1 0 0 2 -4 OK BAD -1 1 1 1 1 0 0 1 - (-1) + 0 0 1 - (-1) + 0 0 1 0 C 0 0 0 2 0 1 0 0 2 OK OK - 3 1 0 1 - 4 1 0 0 - 1 + 1 1 1 - 1 + 1 1 1 -4 C 1 0 0 - 5 C 0 1 1 -4 3 OK BAD
Error during signed subtraction: R = A - B A, B different sign and B, R same sign called overflow
Arithmetic- logic unit (ALU) Condition codes C, V, N, Z 32 A 32 C 32 B Operation C = carry V = overflow N = sign bit of R Z = 1 if R = 0
Compare two unsigned numbers? is A < B ? Easy! Compute A - B and examine carry But – to compare two signed numbers? Most common mistake: Compute R = A - B, then look at sign of R. If R < 0 then A < B (N-bit) Not good enough!
To compare two signed numbers: What about A = - 4 B = 3 (- 4) 100 - 3 + 101 c 001 Assumption: “If R neg then A < B” We conclude A B, that is - 4 3 Wrong!
Some examples A 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 -1 1 1 1 1 0 0 1 - (-1) + 0 0 1 - (-1) + 0 0 1 - 3 1 0 1 - 4 1 0 0 - 1 + 1 1 1 - 1 + 1 1 1
Some examples B 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 2 C 0 1 0 4 1 0 0 3 < +1? No! 3 < -1? No! -1 1 1 1 1 0 0 1 - (-1) + 0 0 1 - (-1) + 0 0 1 0 C 0 0 0 2 0 1 0 -1 < -1? No! 1 < -1? No! - 3 1 0 1 - 4 1 0 0 - 1 + 1 1 1 - 1 + 1 1 1 -4 C 1 0 0 - 5 C 0 1 1 -3 < +1? Yes! -4 < 1? Yes!
Some examples C 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 2 C 0 1 0 4 1 0 0 3 < +1? No! 3 < -1? No! N = 0, V = 0 N = 1, V = 1 -1 1 1 1 1 0 0 1 - (-1) + 0 0 1 - (-1) + 0 0 1 0 C 0 0 0 2 0 1 0 -1 < -1? No! 1 < -1? No! N = 0, V = 0 N = 0, V = 0 - 3 1 0 1 - 4 1 0 0 - 1 + 1 1 1 - 1 + 1 1 1 -4 C 1 0 0 - 5 C 0 1 1 -3 < +1? Yes! -4 < 1? Yes! N = 1, V = 0 N = 0, V = 1
To compare signed numbers: Compute R = A - B A < B true if N and V are different A<B = exor(N,V) after computation