Sie sind auf Seite 1von 50

Binary numbers and arithmetic

ADDITION

Addition (decimal)

1 4 5

5 14 19

5 5 10

6 5 11

11

12 99 111

Addition (binary)

0 0 0

1 0 1

0 1 1

1 1 10

Addition (binary)
1 11 1

01101 01011 11000

Addition (binary)

0 0 0

1 0 1

0 1 1

1 1 10

So can we count in binary?

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)
Its 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. 1s complement (diminished radix complement) 3. 2s complement (radix complement) 4. excess bD-1

Signed magnitude
Ex. 4-bit signed magnitude
1 bit for sign 3 bits for magnitude

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

0 0000 1000 1 0001 1001 2 0010 1010 3 0011 1011 4 0100 1100 5 0101 1101 6 0110 1110 7 0111 1111

1s 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.

1s 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 9s complement of 1238910?


Given b=10 and D=5. Then the 9s complement of 12389 = 105 1 12389 = 100000 1 12389 = 99999 12389 = 87610

1s 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)

2 0010 1101 3 0011 1100 4 0100 1011 5 0101 1010 6 0110 1001 7 0111 1000

Shortcut for base 2?


All combinations used, but 2 zeros!

2s 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 10s complement of 12389 = 105 12389 = 100000 12389 = 87611.

2s 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.

2 0010 1110 3 0011 1101 4 0100 1100 5 0101 1011 6 0110 1010 7 0111 1001

Shortcut for base 2?

2s complement (radix complement)


Shortcut for base 2?
Yes! Flip the bits and add 1.

0 0000 0000 1 0001 1111 2 0010 1110 3 0011 1101 4 0100 1100 5 0101 1011 6 0110 1010 7 0111 1001

2s 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 2s complement?

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.

0 1000 1000 1 1001 0111 2 1010 0110 3 1011 0101 4 1100 0100 5 1101 0011 6 1110 0010 7 1111 0001

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.

2s complement vs. excess bD-1


In 2s, positives start with 0; in excess, positives start with 1. Both have one zero (positive). Remaining bits are the same.
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

Summary of methods for representing signed ints.


N 0 1 2 3 4 5 6 7 n 0000 0001 0010 0011 0100 0101 0110 0111 n 1000 1001 1010 1011 1100 1101 1110 1111 n 1111 1110 1101 1100 1011 1010 1001 1000 n 0000 1111 1110 1101 1100 1011 1010 1001

signedMag 1sComp 2 sComp excess n 1000 0111 0110 0101 0100 0011 0010 0001

8 n 1000 1001 1010 1011 1100 1101 1110 1111

1000=-8| 0000 unused

Signed magnitude 1s complement 2s 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 { { { { R = |A| + |B|; R = |A| - |B|; R = 0; R = |B| - |A|; Rsign = Asign; Rsign = Asign; Rsign = 0; Rsign = Bsign; } } } }

Complicated?

2s complement

BINARY ARITHMETIC

Representing numbers (ints) using 2s 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

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

In general, for k bits, the signed range is [-2k-1..+2k-1-1]. So where does the extra negative value come from?

Addition of 2s complement binary numbers


Consider 8-bit 2s 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 01100010

0 0111010

Addition of 2s complement binary numbers


Consider 8-bit 2s 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 1 1

1 01 01000 01111010 1 00100010

So how can we perform subtraction?

Addition of 2s complement binary numbers


Consider 8-bit 2s complement binary numbers. Subtraction is nothing but addition of the 2s complement.
Ex. 58 40 = 58 + (-40) = 18
discard carry

1 1 11

0 0111010 11011000 1 00010010

Carry vs. overflow

Addition of 2s 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 2s 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 2s 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? Whats 127 as a 2s complement binary number?

01111111 01111111 11111110


What is 111111102? Flip the bits: 00000001. Then add 1: 00000010. This is -2.

1s complement

BINARY ARITHMETIC

Addition with 1s complement


Note: 1s complement has two 0s! 1s 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 1s complement addition


Ex. Let X = A816 and Y = 8616. Calculate Y - X using 1s complement.

8-bit 1s complement addition


Ex. Let X = A816 and Y = 8616. Calculate Y - X using 1s complement.
Y = 1000 01102 = -12110

1000 0110 0101 0111 1101 1101

X = 1010 10002 = -8710 ~X = 0101 01112


(Note: C=0 out of msb.)

Y - X = -121 + 87 = -34 (base 10)

8-bit 1s complement addition


Ex. Let X = A816 and Y = 8616. Calculate X - Y using 1s complement.

8-bit 1s complement addition


Ex. Let X = A816 and Y = 8616. Calculate X - Y using 1s complement.
X = 1010 10002 = -8710 Y = 1000 01102 = -12110 ~Y = 0111 10012 (Note: C=1 out of msb.)

1010 1000 01111001 1 0010 0001


end around carry

0010 0010

X - Y = -87 + 121 = 34 (base 10)

Excess K (biased)

BINARY ARITHMETIC

Method: Simply add and then flip the sign bit.


-1 +5 -+4 +1 -5 --4 +1 +5 -+6 -1 -5 --6 0111 1101 ---0100 -> flip sign -> 1100 1001 0011 ---1100 -> flip sign -> 0100 1001 1101 ---0110 -> flip sign -> 1110 0111 0011 ---1010 -> toggle sign -> 0010

Binary arithmetic and Excess K N (biased)

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.)

Das könnte Ihnen auch gefallen