Download binary-arithmetic

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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.)
Related documents