binary-arithmetic

advertisement
Binary numbers and arithmetic
ADDITION
Addition (decimal)
1
5
4
 14
5
19
1
5
5
10
1
6
5
11
11
12
 99
111
Addition (binary)
0
1
0
0
0
1
0
1
1
1
1
1
10
Addition (binary)
1 11 1
011 01
 01011
11000
Addition (binary)
0
1
0
0
0
1
0
1
1
So can we count in binary?
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
2
3
4
5
6
7
0001
0010
0011
0100
0101
0110
0111
1001
1010
1011
1100
1101
1110
1111
Signed magnitude
• Ex. 4-bit signed magnitude
– 1 bit for sign
– 3 bits for magnitude
N N
0 0000 1000
1
2
3
4
5
6
7
0001
0010
0011
0100
0101
0110
0111
1001
1010
1011
1100
1101
1110
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
5
6
7
0100
0101
0110
0111
1011
1010
1001
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
5
6
7
0100
0101
0110
0111
1100
1011
1010
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
5
6
7
0100
0101
0110
0111
1100
1011
1010
1001
2’s complement
(radix complement)
• Are all combinations of 4 bits
used?
N N
0 0000 0000
– No. (Now we only have one
zero.)
– 1000 is missing!
1 0001 1111
2 0010 1110
3 0011 1101
• What is 1000?
• Is it positive or negative?
• Does -8 + 1 = -7 work in 2’s
complement?
4
5
6
7
0100
0101
0110
0111
1100
1011
1010
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
5
6
7
1100
1101
1110
1111
0100
0011
0010
0001
2’s complement vs. excess bD-1
• In 2’s, positives start with 0; in
excess, positives start with 1.
N N
0 1000 1000
• Both have one zero (positive).
1 1001 0111
2 1010 0110
3 1011 0101
• Remaining bits are the same.
4
5
6
7
1100
1101
1110
1111
0100
0011
0010
0001
Summary of methods for
representing signed ints.
signedMag 1sCom p 2 sCom p excess
8
N
0
n
0000
n
1000
n
1111
n
0000
n
n
1000 1000
1
0001
1001
1110
1111
0111 1001
2
0010
1010
1101
1110
0110 1010
3
4
5
6
0011
0100
0101
0110
1011
1100
1101
1110
1100
1011
1010
1001
1101
1100
1011
1010
0101
0100
0011
0010
7
0111
1111
1000
1001
0001 1111
1011
1100
1101
1110
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
5
6
7
8
0100
0101
0110
0111
1100
1011
1010
1001
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
1 1 1 1
1 01 01000
 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
5
6
7
0100
0101
0110
0111
1011
1010
1001
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.)
10000110
 01010111
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.)
10101000
 01111001
1 00100001
end around
carry
1
00100010
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
5
6
7
1100
1101
1110
1111
0100
0011
0010
0001
(Not used for integer arithmetic but employed
in IEEE 754 floating point standard.)
Download