Successfully reported this slideshow.
Upcoming SlideShare
×

# 2's complement

4,192 views

Published on

Published in: Education
• Full Name
Comment goes here.

Are you sure you want to Yes No
• Be the first to comment

### 2's complement

1. 1. Exam SchedThurs (july 19)Computer FundamentalsPhysics *labFri (july 20)EnglishCalculusMon (july 23)HumanitiesTues (july 24)PESociology and anthropologyProgramming2s Complement Representation for Signed Integers  Definition  Calculation of 2s Complement  Addition  Subtraction  Multiplication  Division  Sign Extension  Other Signed Representations  NotesDefinitionProperty Twos complement representation allows the use of binary arithmetic operations on signed integers, yielding the correct 2s complement results.Positive Numbers Positive 2s complement numbers are represented as the simple binary.Negative Numbers
2. 2. Negative 2s complement numbers are represented as the binary number that when added to positive number of the same magnitude equals zero. Integer 2s Complement Signed Unsigned 5 5 0000 0101 4 4 0000 0100 3 3 0000 0011 2 2 0000 0010 1 1 0000 0001 0 0 0000 0000 -1 255 1111 1111 -2 254 1111 1110 -3 253 1111 1101 -4 252 1111 1100 -5 251 1111 1011Note: The most significant (leftmost) bit indicates the sign of the integer; therefore it is sometimes callethe sign bit. If the sign bit is zero, then the number is greater than or equal to zero, or positive. If the sign bit is one, then the number is less than zero, or negative.Calculation of 2s ComplementTo calculate the 2s complement of an integer, invert the binary equivalent of the number by changinall of the ones to zeroes and all of the zeroes to ones (also called 1s complement), and then add oneFor example,0001 0001(binary 17) 1110 1111(twos complement -17) NOT(0001 0001) = 1110 1110 (Invert bits)1110 1110 + 0000 0001 = 1110 1111 (Add 1)
3. 3. 2s Complement AdditionTwos complement addition follows the same rules as binary addition.For example,5 + (-3) = 2 0000 0101 = +5 + 1111 1101 = -3 0000 0010 = +22s Complement SubtractionTwos complement subtraction is the binary addition of the minuend to the 2s complement of thesubtrahend (adding a negative number is the same as subtracting a positive one).For example,7 - 12 = (-5) 0000 0111 = +7 + 1111 0100 = -12 1111 1011 = -52s Complement MultiplicationTwos complement multiplication follows the same rules as binary multiplication.For example,(-4) × 4 = (-16) 1111 1100 = -4 × 0000 0100 = +4 1111 0000 = -162s Complement DivisionTwos complement division is repeated 2s complement subtraction. The 2s complement of the divisorcalculated, then added to the dividend. For the next subtraction cycle, the quotient replaces the
4. 4. dividend. This repeats until the quotient is too small for subtraction or is zero, then it becomes theremainder. The final answer is the total of subtraction cycles plus the remainder.For example,7 ÷ 3 = 2 remainder 1 0000 0111 = +7 0000 0100 = +4 + 1111 1101 = -3 + 1111 1101 = -3 0000 0100 = +4 0000 0001 = +1 (remainder)Sign ExtensionTo extend a signed integer from 8 bits to 16 bits or from 16 bits to 32 bits, append additional bits on theside of the number. Fill each extra bit with the value of the smaller numbers most significant bit (the sigbit).For example, Signed Integer 8-bit Representation 16-bit Representation -1 1111 1111 1111 1111 1111 1111 +1 0000 0001 0000 0000 0000 0001Other Representations of Signed IntegersSign-Magnitude Representation Another method of representing negative numbers is sign-magnitude. Sign-magnitude representation also uses the most significant bit of the number to indicate the sign. A negative number is the 7-bit binary representation of the positive number with the most significant bit set one. The drawbacks to using this method for arithmetic computation are that a different set of rules are required and that zero can have two representations (+0, 0000 0000 and -0, 1000 0000)Offset Binary Representation A third method for representing signed numbers is offset binary. Begin calculating a offset binar code by assigning half of the largest possible number as the zero value. A positive integer is the absolute value added to the zero number and a negative integer is subtracted. Offset binary is popular in A/D and D/A conversions, but it is still awkward for arithmetic computation. For example, Largest value for 8-bit integer = 28 = 256
5. 5. Offset binary zero value = 256 ÷ 2 = 128(decimal) = 1000 0000(binary) 1000 0000(offset binary 0) + 0001 0110(binary 22) = 1001 0110(offset binary +22) 1000 0000(offset binary 0) - 0000 0111(binary 7) = 0111 1001(offset binary -7) Signed Integer Sign Magnitude Offset Binary +5 0000 0101 1000 0101 +4 0000 0100 1000 0100 +3 0000 0011 1000 0011 +2 0000 0010 1000 0010 +1 0000 0001 1000 0001 0000 0000 0 1000 0000 1000 0000 -1 1000 0001 0111 1111 -2 1000 0010 0111 1110 -3 1000 0011 0111 1101 -4 1000 0100 0111 1100 -5 1000 0101 0111 1011NotesOther Complements 1s Complement = NOT(n) = 1111 1111 - n 9s Complement = 9999 9999 - n 10s Complement = (9999 9999 - n) + 1Twos ComplementThomas Finley, April 2000Contents and Introduction Contents and Introduction Conversion from Twos Complement
6. 6. Conversion to Twos Complement Arithmetic with Twos Complement Why Inversion and Adding One WorksTwos complement is not a complicated scheme and is not well served by anything lengthly. Therefore, after this introduction, which explainswhat twos complement is and how to use it, there are mostly examples.Twos complement is the way every computer I know of chooses to represent integers. To get the twos complement negative notation of aninteger, you write out the number in binary. You then invert the digits, and add one to the result.Suppose were working with 8 bit quantities (for simplicitys sake) and suppose we want to find how -28 would be expressed in twoscomplement notation. First we write out 28 in binary form.00011100Then we invert the digits. 0 becomes 1, 1 becomes 0.11100011Then we add 1.11100100That is how one would write -28 in 8 bit binary.Conversion from Twos ComplementUse the number 0xFFFFFFFF as an example. In binary, that is:1111 1111 1111 1111 1111 1111 1111 1111What can we say about this number? Its first (leftmost) bit is 1, which means that this represents a number that is negative. Thats just theway that things are in twos complement: a leading 1 means the number is negative, a leading 0 means the number is 0 or positive.To see what this number is a negative of, we reverse the sign of this number. But how to do that? The class notes say (on 3.17) that toreverse the sign you simply invert the bits (0 goes to 1, and 1 to 0) and add one to the resulting number.The inversion of that binary number is, obviously:0000 0000 0000 0000 0000 0000 0000 0000Then we add one.0000 0000 0000 0000 0000 0000 0000 0001So the negative of 0xFFFFFFFF is 0x00000001, more commonly known as 1. So 0xFFFFFFFF is -1.Conversion to Twos ComplementNote that this works both ways. If you have -30, and want to represent it in 2s complement, you take the binary representation of 30:0000 0000 0000 0000 0000 0000 0001 1110Invert the digits.
7. 7. 1111 1111 1111 1111 1111 1111 1110 0001And add one.1111 1111 1111 1111 1111 1111 1110 0010Converted back into hex, this is 0xFFFFFFE2. And indeed, suppose you have this code: #include <stdio.h> int main() { int myInt; myInt = 0xFFFFFFE2; printf("%dn",myInt); return 0; }That should yield an output of -30. Try it out if you like.Arithmetic with Twos ComplementOne of the nice properties of twos complement is that addition and subtraction is made very simple. With a system like twos complement,the circuitry for addition and subtraction can be unified, whereas otherwise they would have to be treated as separate operations.In the examples in this section, I do addition and subtraction in twos complement, but youll notice that every time I do actual operations withbinary numbers I am always adding.Example 1Suppose we want to add two numbers 69 and 12 together. If were to use decimal, we see the sum is 81. But lets use binary instead, sincethats what the computer uses. 1 1 Carry Row 0000 0000 0000 0000 0000 0000 0100 0101 (69)+ 0000 0000 0000 0000 0000 0000 0000 1100 (12) 0000 0000 0000 0000 0000 0000 0101 0001 (81)Example 2Now suppose we want to subtract 12 from 69. Now, 69 - 12 = 69 + (-12). To get the negative of 12 we take its binary representation, invert,and add one.0000 0000 0000 0000 0000 0000 0000 1100Invert the digits.
8. 8. 1111 1111 1111 1111 1111 1111 1111 0011And add one.1111 1111 1111 1111 1111 1111 1111 0100The last is the binary representation for -12. As before, well add the two numbers together. 1111 1111 1111 1111 1111 1111 1 1 Carry Row 0000 0000 0000 0000 0000 0000 0100 0101 (69)+ 1111 1111 1111 1111 1111 1111 1111 0100 (-12) 0000 0000 0000 0000 0000 0000 0011 1001 (57)We result in 57, which is 69-12.Example 3Lastly, well subtract 69 from 12. Similar to our operation in example 2, 12 - 69 = 12 + (- 69). The twos complement representation of 69 isthe following. I assume youve had enough illustrations of inverting and adding one.1111 1111 1111 1111 1111 1111 1011 1011So we add this number to 12. 111 Carry Row 0000 0000 0000 0000 0000 0000 0000 1100 (12)+ 1111 1111 1111 1111 1111 1111 1011 1011 (-69) 1111 1111 1111 1111 1111 1111 1100 0111 (-57)This results in 12 - 69 = -57, which is correct.Why Inversion and Adding One WorksInvert and add one. Invert and add one. It works, and you may want to know why. If you dont care, skip this, as it is hardly essential. This isonly intended for those curious as to why that rather strange technique actually makes mathematical sense.Inverting and adding one might sound like a stupid thing to do, but its actually just a mathematical shortcut of a rather straightforwardcomputation.Borrowing and Subtraction
9. 9. Remember the old trick we learned in first grade of "borrowing ones" from future tens places to perform a subtraction? You may not, so Illgo over it. As an example, Ill do 93702 minus 58358. 93702 - 58358 -------Now, then, whats the answer to this computation? Well start at the least significant digit, and subtract term by term. We cant subtract 8 from2, so well borrow a digit from the next most significant place (the tens place) to make it 12 minus 8. 12 minus 8 is 4, and we note a 1 digitabove the tens column to signify that we must remember to subtract by one on the next iteration. 1 93702 - 58358 ------- 4This next iteration is 0 minus 5, and minus 1, or 0 minus 6. Again, we cant do 0 minus 6, so we borrow from the next most significant figureonce more to make that 10 minus 6, which is 4. 11 93702 - 58358 ------- 44This next iteration is 7 minus 3, and minus 1, or 7 minus 4. This is 3. We dont have to borrow this time. 11 93702 - 58358 ------- 344This next iteration is 3 minus 8. Again, we must borrow to make thi 13 minus 8, or 5. 1 11 93702 - 58358 ------- 5344This next iteration is 9 minus 5, and minus 1, or 9 minus 6. This is 3. We dont have to borrow this time. 1 11 93702 - 58358 ------- 35344So 93702 minus 58358 is 35344.Borrowing and its Relevance to the Negative of a Number
10. 10. When you want to find the negative of a number, you take the number, and subtract it from zero. Now, suppose were really stupid, like acomputer, and instead of simply writing a negative sign in front of a number A when we subtract A from 0, we actually go through the steps ofsubtracting A from 0.Take the following idiotic computation of 0 minus 3: 1 11 111 1111 000000 000000 000000 000000 000000 - 3 - 3 - 3 - 3 - 3 ------ ------ ------ ------ ------ 7 97 997 9997Et cetera, et cetera. Wed wind up with a number composed of a 7 in the ones digit, a 9 in every digit more significant than the 100s place.The Same in BinaryWe can do more or less the same thing with binary. In this example I use 8 bit binary numbers, but the principle is the same for both 8 bitbinary numbers (chars) and 32 bit binary numbers (ints). I take the number 75 (in 8 bit binary that is 010010112) and subtract that from zero.Sometimes I am in the position where I am subtracting 1 from zero, and also subtracting another borrowed 1 against it. 1 11 111 1111 0000000 0000000 0000000 0000000 0000000 0 0 0 0 0 - - - - - 0100101 0100101 0100101 0100101 0100101 1 1 1 1 1 ------- ------- ------- ------- ------- --- --- --- --- --- 1 01 101 0101 1111111 11111 111111 1111111 1 0000000 0000000 0000000 0000000 0 0 0 0 - - - - 0100101 0100101 0100101 0100101 1 1 1 1 ------- ------- ------- ------- --- --- --- --- 10101 110101 0110101 1011010 1If we wanted we could go further, but there would be no point. Inside of a computer the result of this computation would be assigned to aneight bit variable, so any bits beyond the eighth would be discarded.
11. 11. With the fact that well simply disregard any extra digits in mind, what difference would it make to the end result to have subtracted 01001011from 100000000 (a one bit followed by 8 zero bits) rather than 0? There is none. If we do that, we wind up with the same result: 11111111 100000000 - 01001011 ---------- 010110101So to find the negative of an n-bit number in a computer, subtract the number from 0 or subtract it from 2n. In binary, this power of two will bea one bit followed by n zero bits.In the case of 8-bit numbers, it will answer just as well if we subtract our number from (1 + 11111111) rather than 100000000. 1 + 11111111 - 01001011 ----------In binary, when we subtract a number A from a number of all 1 bits, what were doing is inverting the bits of A. So the subtract operation isthe equivalent of inverting the bits of the number. Then, we add one.So, to the computer, taking the negative of a number, that is, subtracting a number from 0, is the same as inverting the bits and adding one,which is where the trick comes from.Thomas Finley 2000