SlideShare a Scribd company logo
2
Most read
3
Most read
Exam Sched

Thurs (july 19)
Computer Fundamentals
Physics *lab

Fri (july 20)
English
Calculus

Mon (july 23)
Humanities

Tues (july 24)
PE
Sociology and anthropology




Programming


2's Complement Representation for Signed Integers
     Definition
     Calculation of 2's Complement
     Addition
     Subtraction
     Multiplication
     Division
     Sign Extension
     Other Signed Representations
     Notes




Definition

Property
       Two's complement representation allows the use of binary arithmetic operations on signed
       integers, yielding the correct 2's complement results.
Positive Numbers
       Positive 2's complement numbers are represented as the simple binary.
Negative Numbers
Negative 2's complement numbers are represented as the binary number that when added to
        positive number of the same magnitude equals zero.
        Integer
                       2's 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 1011
Note: The most significant (leftmost) bit indicates the sign of the integer; therefore it is sometimes calle
the 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 2's Complement

To calculate the 2's complement of an integer, invert the binary equivalent of the number by changin
all of the ones to zeroes and all of the zeroes to ones (also called 1's complement), and then add one

For example,

0001 0001(binary 17)    1110 1111(two's complement -17)


        NOT(0001 0001) = 1110 1110 (Invert bits)
1110 1110 + 0000 0001 = 1110 1111 (Add 1)
2's Complement Addition

Two's complement addition follows the same rules as binary addition.

For example,

5 + (-3) = 2        0000 0101   = +5
                   + 1111 1101 = -3

                    0000 0010   = +2



2's Complement Subtraction

Two's complement subtraction is the binary addition of the minuend to the 2's complement of the
subtrahend (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   = -5



2's Complement Multiplication

Two's complement multiplication follows the same rules as binary multiplication.

For example,

(-4) × 4 = (-16)       1111 1100   = -4
                      × 0000 0100 = +4

                       1111 0000   = -16



2's Complement Division

Two's complement division is repeated 2's complement subtraction. The 2's complement of the divisor
calculated, then added to the dividend. For the next subtraction cycle, the quotient replaces the
dividend. This repeats until the quotient is too small for subtraction or is zero, then it becomes the
remainder. 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 Extension

To extend a signed integer from 8 bits to 16 bits or from 16 bits to 32 bits, append additional bits on the
side of the number. Fill each extra bit with the value of the smaller number's most significant bit (the sig
bit).

For example,


 Signed Integer    8-bit Representation   16-bit Representation


        -1              1111 1111          1111 1111 1111 1111

       +1               0000 0001          0000 0000 0000 0001



Other Representations of Signed Integers

Sign-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
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 1011



Notes

Other Complements
      1's Complement = NOT(n) = 1111 1111 - n
      9's Complement = 9999 9999 - n
      10's Complement = (9999 9999 - n) + 1



Two's Complement
Thomas Finley, April 2000



Contents and Introduction
          Contents and Introduction

          Conversion from Two's Complement
Conversion to Two's Complement

            Arithmetic with Two's Complement

            Why Inversion and Adding One Works

Two's complement is not a complicated scheme and is not well served by anything lengthly. Therefore, after this introduction, which explains
what two's complement is and how to use it, there are mostly examples.

Two's complement is the way every computer I know of chooses to represent integers. To get the two's complement negative notation of an
integer, you write out the number in binary. You then invert the digits, and add one to the result.

Suppose we're working with 8 bit quantities (for simplicity's sake) and suppose we want to find how -28 would be expressed in two's
complement notation. First we write out 28 in binary form.


00011100

Then we invert the digits. 0 becomes 1, 1 becomes 0.


11100011

Then we add 1.


11100100

That is how one would write -28 in 8 bit binary.



Conversion from Two's Complement
Use the number 0xFFFFFFFF as an example. In binary, that is:


1111            1111         1111           1111           1111           1111           1111           1111

What can we say about this number? It's first (leftmost) bit is 1, which means that this represents a number that is negative. That's just the
way that things are in two's 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 to
reverse 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           0000
Then we add one.

0000            0000         0000           0000           0000           0000           0000           0001

So the negative of 0xFFFFFFFF is 0x00000001, more commonly known as 1. So 0xFFFFFFFF is -1.



Conversion to Two's Complement
Note that this works both ways. If you have -30, and want to represent it in 2's complement, you take the binary representation of 30:


0000            0000         0000           0000           0000           0000           0001           1110

Invert the digits.
1111            1111           1111            1111           1111        1111           1110           0001

And add one.


1111            1111           1111            1111           1111        1111           1110           0010

Converted 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 Two's Complement
One of the nice properties of two's complement is that addition and subtraction is made very simple. With a system like two's 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 two's complement, but you'll notice that every time I do actual operations with
binary numbers I am always adding.


Example 1
Suppose we want to add two numbers 69 and 12 together. If we're to use decimal, we see the sum is 81. But let's use binary instead, since
that's 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 2
Now 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           1100

Invert the digits.
1111           1111           1111            1111          1111           1111           1111           0011

And add one.


1111           1111           1111            1111          1111           1111           1111           0100

The last is the binary representation for -12. As before, we'll 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 3
Lastly, we'll subtract 69 from 12. Similar to our operation in example 2, 12 - 69 = 12 + (- 69). The two's complement representation of 69 is
the following. I assume you've had enough illustrations of inverting and adding one.


1111           1111           1111            1111          1111           1111           1011           1011
So 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 Works
Invert and add one. Invert and add one. It works, and you may want to know why. If you don't care, skip this, as it is hardly essential. This is
only 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 it's actually just a mathematical shortcut of a rather straightforward
computation.


Borrowing and Subtraction
Remember the old trick we learned in first grade of "borrowing one's" from future ten's places to perform a subtraction? You may not, so I'll
go over it. As an example, I'll do 93702 minus 58358.


             93702
           - 58358
           -------

Now, then, what's the answer to this computation? We'll start at the least significant digit, and subtract term by term. We can't subtract 8 from
2, so we'll 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 digit
above the ten's column to signify that we must remember to subtract by one on the next iteration.


                1
             93702
           - 58358
           -------
                  4

This next iteration is 0 minus 5, and minus 1, or 0 minus 6. Again, we can't do 0 minus 6, so we borrow from the next most significant figure
once more to make that 10 minus 6, which is 4.


               11
             93702
           - 58358
           -------
                44

This next iteration is 7 minus 3, and minus 1, or 7 minus 4. This is 3. We don't have to borrow this time.


               11
             93702
           - 58358
           -------
               344

This next iteration is 3 minus 8. Again, we must borrow to make thi 13 minus 8, or 5.


             1 11
             93702
           - 58358
           -------
              5344

This next iteration is 9 minus 5, and minus 1, or 9 minus 6. This is 3. We don't have to borrow this time.


             1 11
             93702
           - 58358
           -------
             35344

So 93702 minus 58358 is 35344.


Borrowing and it's Relevance to the Negative of a Number
When you want to find the negative of a number, you take the number, and subtract it from zero. Now, suppose we're really stupid, like a
computer, 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 of
subtracting 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                        9997


Et cetera, et cetera. We'd wind up with a number composed of a 7 in the one's digit, a 9 in every digit more significant than the 100's place.


The Same in Binary
We 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 bit
binary 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
                                                                                                     1


If 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 an
eight bit variable, so any bits beyond the eighth would be discarded.
With the fact that we'll simply disregard any extra digits in mind, what difference would it make to the end result to have subtracted 01001011
from 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
           ----------
            010110101

So 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 be
a 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 we're doing is inverting the bits of A. So the subtract operation is
the 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

More Related Content

PPTX
Multiplication algorithm
PPTX
1s and 2s complement
PDF
Floating point presentation
PPT
Complements
PPTX
Register transfer and micro-operation
PPTX
Signed Addition And Subtraction
PPTX
PDF
Displacement addressing
Multiplication algorithm
1s and 2s complement
Floating point presentation
Complements
Register transfer and micro-operation
Signed Addition And Subtraction
Displacement addressing

What's hot (20)

PPTX
Lecture #3 Flag Register.pptx
PPTX
Quick tutorial on IEEE 754 FLOATING POINT representation
PDF
Decoders
PDF
Binary Arithmetic Operations
PPTX
Floating point representation
PPT
CPU Register Organization.ppt
PPTX
3.codes( binary code ,excess 3, gray code )
PPT
Booths Multiplication Algorithm
PPTX
PPTX
Restoring and Non-Restoring division algo for CSE
PPTX
Unit 3 combinational circuits
PPTX
1's and 2's complement
PPTX
Number system in Digital Electronics
PPT
1’s and 2’s complements
PPT
Arithmetic Logic Unit (ALU)
PPT
Two’s complement
PPTX
Encoder and decoder
PPTX
Microoperations
PPT
09 Arithmetic
PPS
Registers and-common-bus
Lecture #3 Flag Register.pptx
Quick tutorial on IEEE 754 FLOATING POINT representation
Decoders
Binary Arithmetic Operations
Floating point representation
CPU Register Organization.ppt
3.codes( binary code ,excess 3, gray code )
Booths Multiplication Algorithm
Restoring and Non-Restoring division algo for CSE
Unit 3 combinational circuits
1's and 2's complement
Number system in Digital Electronics
1’s and 2’s complements
Arithmetic Logic Unit (ALU)
Two’s complement
Encoder and decoder
Microoperations
09 Arithmetic
Registers and-common-bus
Ad

Viewers also liked (20)

PPT
Complement
PPT
2s complement arithmetic
PDF
Math1003 1.15 - Integers and 2's Complement
PDF
Math1003 - An Intro to Number Systems
PPTX
Introduction number systems and conversion
PPT
Lecture 6 adder (hardware circuit)
PPTX
Digital logic mohammed salim ch2
PPT
Al2ed chapter11
PDF
Ranjak Vaidic Ganit Preview (Marathi Research Book)
PDF
Main Memory
PDF
OS - Thread
PPTX
Photochromic Lens
PDF
Operating Systems 1 (7/12) - Threads
PPT
Representation of Negative Numbers
PPT
Photochromatic lenses and tints www.eyenirvaan.com
PPTX
Thread presentation
PPT
Ch5: Threads (Operating System)
PPT
Binary Arithmetic
PPT
Operating System Chapter 4 Multithreaded programming
PPTX
Threads
Complement
2s complement arithmetic
Math1003 1.15 - Integers and 2's Complement
Math1003 - An Intro to Number Systems
Introduction number systems and conversion
Lecture 6 adder (hardware circuit)
Digital logic mohammed salim ch2
Al2ed chapter11
Ranjak Vaidic Ganit Preview (Marathi Research Book)
Main Memory
OS - Thread
Photochromic Lens
Operating Systems 1 (7/12) - Threads
Representation of Negative Numbers
Photochromatic lenses and tints www.eyenirvaan.com
Thread presentation
Ch5: Threads (Operating System)
Binary Arithmetic
Operating System Chapter 4 Multithreaded programming
Threads
Ad

Similar to 2's complement (20)

PPTX
Computer Architecture Binary Arithmetic Lecture.pptx
PPT
Digital fundamendals r001a
PPT
Lecture 1-431171839-lec2-BinaryArithmetic.ppt
PPTX
CH10-COA10e.pptx
PPT
Lecture 06 computer arithmatic
PPT
Twos_Complement_Binary in Information Technology
PPT
Mba admission in india
PPT
lec2_BinaryArithmetic.ppt
PPT
Mba admission in india
PPTX
L3 ARITHMETIC OPERATIONS.pptx
PPTX
DEC Unit 1 Full-1.pptx Boolean Algebra and Logic gates
PPTX
Arithmetic Computation using 2's Complement Notation
PPT
สอนสนอนlec3สอนสนอนlec3สอนสนอนlec3สอนสนอนlec3สอนสนอนlec3
PDF
IN 1300 LEC_D02(B15) Basic electronic 2.pdf
PPT
ch3a-binary-numbers.ppt
PPT
Number Systems.ppt
PDF
Working With Binary Numbers
PPTX
Number system
PPT
intro_Bit_Data_Type_and_opreationon_in computer.ppt
PPTX
Chapter_02_Data_Representation Yifeng Zhu
Computer Architecture Binary Arithmetic Lecture.pptx
Digital fundamendals r001a
Lecture 1-431171839-lec2-BinaryArithmetic.ppt
CH10-COA10e.pptx
Lecture 06 computer arithmatic
Twos_Complement_Binary in Information Technology
Mba admission in india
lec2_BinaryArithmetic.ppt
Mba admission in india
L3 ARITHMETIC OPERATIONS.pptx
DEC Unit 1 Full-1.pptx Boolean Algebra and Logic gates
Arithmetic Computation using 2's Complement Notation
สอนสนอนlec3สอนสนอนlec3สอนสนอนlec3สอนสนอนlec3สอนสนอนlec3
IN 1300 LEC_D02(B15) Basic electronic 2.pdf
ch3a-binary-numbers.ppt
Number Systems.ppt
Working With Binary Numbers
Number system
intro_Bit_Data_Type_and_opreationon_in computer.ppt
Chapter_02_Data_Representation Yifeng Zhu

More from Arvenz Gavino (20)

PDF
Kuya modesto3
PDF
Kuya rafael3
PDF
Kuya rafael2
PDF
Kuya modesto3
PDF
Kuya modesto2
PDF
Kuya modesto1
PDF
Kuya rafael
DOCX
My visit in manila is one thing unforgettable
DOCX
Music has a magic that is unexplainable
DOCX
DOCX
DOCX
PPT
Heat transfer
PPT
Lec 7 elements_of_the_state
PPT
Lec 6 philippines2
PPT
Lec 7 elements_of_the_state
PPT
Lec 7 filipino_values
Kuya modesto3
Kuya rafael3
Kuya rafael2
Kuya modesto3
Kuya modesto2
Kuya modesto1
Kuya rafael
My visit in manila is one thing unforgettable
Music has a magic that is unexplainable
Heat transfer
Lec 7 elements_of_the_state
Lec 6 philippines2
Lec 7 elements_of_the_state
Lec 7 filipino_values

Recently uploaded (20)

PPTX
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
PDF
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
PDF
Pre independence Education in Inndia.pdf
PDF
Anesthesia in Laparoscopic Surgery in India
PDF
Physiotherapy_for_Respiratory_and_Cardiac_Problems WEBBER.pdf
PDF
01-Introduction-to-Information-Management.pdf
PDF
STATICS OF THE RIGID BODIES Hibbelers.pdf
PPTX
human mycosis Human fungal infections are called human mycosis..pptx
PDF
Computing-Curriculum for Schools in Ghana
PPTX
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
PDF
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
PPTX
GDM (1) (1).pptx small presentation for students
PPTX
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
PDF
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
PDF
Supply Chain Operations Speaking Notes -ICLT Program
PDF
Classroom Observation Tools for Teachers
PDF
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
PDF
RMMM.pdf make it easy to upload and study
PDF
FourierSeries-QuestionsWithAnswers(Part-A).pdf
PDF
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
Pre independence Education in Inndia.pdf
Anesthesia in Laparoscopic Surgery in India
Physiotherapy_for_Respiratory_and_Cardiac_Problems WEBBER.pdf
01-Introduction-to-Information-Management.pdf
STATICS OF THE RIGID BODIES Hibbelers.pdf
human mycosis Human fungal infections are called human mycosis..pptx
Computing-Curriculum for Schools in Ghana
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
GDM (1) (1).pptx small presentation for students
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
Supply Chain Operations Speaking Notes -ICLT Program
Classroom Observation Tools for Teachers
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
RMMM.pdf make it easy to upload and study
FourierSeries-QuestionsWithAnswers(Part-A).pdf
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx

2's complement

  • 1. Exam Sched Thurs (july 19) Computer Fundamentals Physics *lab Fri (july 20) English Calculus Mon (july 23) Humanities Tues (july 24) PE Sociology and anthropology Programming 2's Complement Representation for Signed Integers  Definition  Calculation of 2's Complement  Addition  Subtraction  Multiplication  Division  Sign Extension  Other Signed Representations  Notes Definition Property Two's complement representation allows the use of binary arithmetic operations on signed integers, yielding the correct 2's complement results. Positive Numbers Positive 2's complement numbers are represented as the simple binary. Negative Numbers
  • 2. Negative 2's complement numbers are represented as the binary number that when added to positive number of the same magnitude equals zero. Integer 2's 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 1011 Note: The most significant (leftmost) bit indicates the sign of the integer; therefore it is sometimes calle the 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 2's Complement To calculate the 2's complement of an integer, invert the binary equivalent of the number by changin all of the ones to zeroes and all of the zeroes to ones (also called 1's complement), and then add one For example, 0001 0001(binary 17) 1110 1111(two's complement -17) NOT(0001 0001) = 1110 1110 (Invert bits) 1110 1110 + 0000 0001 = 1110 1111 (Add 1)
  • 3. 2's Complement Addition Two's complement addition follows the same rules as binary addition. For example, 5 + (-3) = 2 0000 0101 = +5 + 1111 1101 = -3 0000 0010 = +2 2's Complement Subtraction Two's complement subtraction is the binary addition of the minuend to the 2's complement of the subtrahend (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 = -5 2's Complement Multiplication Two's complement multiplication follows the same rules as binary multiplication. For example, (-4) × 4 = (-16) 1111 1100 = -4 × 0000 0100 = +4 1111 0000 = -16 2's Complement Division Two's complement division is repeated 2's complement subtraction. The 2's complement of the divisor calculated, then added to the dividend. For the next subtraction cycle, the quotient replaces the
  • 4. dividend. This repeats until the quotient is too small for subtraction or is zero, then it becomes the remainder. 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 Extension To extend a signed integer from 8 bits to 16 bits or from 16 bits to 32 bits, append additional bits on the side of the number. Fill each extra bit with the value of the smaller number's most significant bit (the sig bit). For example, Signed Integer 8-bit Representation 16-bit Representation -1 1111 1111 1111 1111 1111 1111 +1 0000 0001 0000 0000 0000 0001 Other Representations of Signed Integers Sign-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. 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 1011 Notes Other Complements 1's Complement = NOT(n) = 1111 1111 - n 9's Complement = 9999 9999 - n 10's Complement = (9999 9999 - n) + 1 Two's Complement Thomas Finley, April 2000 Contents and Introduction Contents and Introduction Conversion from Two's Complement
  • 6. Conversion to Two's Complement Arithmetic with Two's Complement Why Inversion and Adding One Works Two's complement is not a complicated scheme and is not well served by anything lengthly. Therefore, after this introduction, which explains what two's complement is and how to use it, there are mostly examples. Two's complement is the way every computer I know of chooses to represent integers. To get the two's complement negative notation of an integer, you write out the number in binary. You then invert the digits, and add one to the result. Suppose we're working with 8 bit quantities (for simplicity's sake) and suppose we want to find how -28 would be expressed in two's complement notation. First we write out 28 in binary form. 00011100 Then we invert the digits. 0 becomes 1, 1 becomes 0. 11100011 Then we add 1. 11100100 That is how one would write -28 in 8 bit binary. Conversion from Two's Complement Use the number 0xFFFFFFFF as an example. In binary, that is: 1111 1111 1111 1111 1111 1111 1111 1111 What can we say about this number? It's first (leftmost) bit is 1, which means that this represents a number that is negative. That's just the way that things are in two's 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 to reverse 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 0000 Then we add one. 0000 0000 0000 0000 0000 0000 0000 0001 So the negative of 0xFFFFFFFF is 0x00000001, more commonly known as 1. So 0xFFFFFFFF is -1. Conversion to Two's Complement Note that this works both ways. If you have -30, and want to represent it in 2's complement, you take the binary representation of 30: 0000 0000 0000 0000 0000 0000 0001 1110 Invert the digits.
  • 7. 1111 1111 1111 1111 1111 1111 1110 0001 And add one. 1111 1111 1111 1111 1111 1111 1110 0010 Converted 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 Two's Complement One of the nice properties of two's complement is that addition and subtraction is made very simple. With a system like two's 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 two's complement, but you'll notice that every time I do actual operations with binary numbers I am always adding. Example 1 Suppose we want to add two numbers 69 and 12 together. If we're to use decimal, we see the sum is 81. But let's use binary instead, since that's 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 2 Now 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 1100 Invert the digits.
  • 8. 1111 1111 1111 1111 1111 1111 1111 0011 And add one. 1111 1111 1111 1111 1111 1111 1111 0100 The last is the binary representation for -12. As before, we'll 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 3 Lastly, we'll subtract 69 from 12. Similar to our operation in example 2, 12 - 69 = 12 + (- 69). The two's complement representation of 69 is the following. I assume you've had enough illustrations of inverting and adding one. 1111 1111 1111 1111 1111 1111 1011 1011 So 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 Works Invert and add one. Invert and add one. It works, and you may want to know why. If you don't care, skip this, as it is hardly essential. This is only 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 it's actually just a mathematical shortcut of a rather straightforward computation. Borrowing and Subtraction
  • 9. Remember the old trick we learned in first grade of "borrowing one's" from future ten's places to perform a subtraction? You may not, so I'll go over it. As an example, I'll do 93702 minus 58358. 93702 - 58358 ------- Now, then, what's the answer to this computation? We'll start at the least significant digit, and subtract term by term. We can't subtract 8 from 2, so we'll 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 digit above the ten's column to signify that we must remember to subtract by one on the next iteration. 1 93702 - 58358 ------- 4 This next iteration is 0 minus 5, and minus 1, or 0 minus 6. Again, we can't do 0 minus 6, so we borrow from the next most significant figure once more to make that 10 minus 6, which is 4. 11 93702 - 58358 ------- 44 This next iteration is 7 minus 3, and minus 1, or 7 minus 4. This is 3. We don't have to borrow this time. 11 93702 - 58358 ------- 344 This next iteration is 3 minus 8. Again, we must borrow to make thi 13 minus 8, or 5. 1 11 93702 - 58358 ------- 5344 This next iteration is 9 minus 5, and minus 1, or 9 minus 6. This is 3. We don't have to borrow this time. 1 11 93702 - 58358 ------- 35344 So 93702 minus 58358 is 35344. Borrowing and it's Relevance to the Negative of a Number
  • 10. When you want to find the negative of a number, you take the number, and subtract it from zero. Now, suppose we're really stupid, like a computer, 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 of subtracting 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 9997 Et cetera, et cetera. We'd wind up with a number composed of a 7 in the one's digit, a 9 in every digit more significant than the 100's place. The Same in Binary We 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 bit binary 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 1 If 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 an eight bit variable, so any bits beyond the eighth would be discarded.
  • 11. With the fact that we'll simply disregard any extra digits in mind, what difference would it make to the end result to have subtracted 01001011 from 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 ---------- 010110101 So 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 be a 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 we're doing is inverting the bits of A. So the subtract operation is the 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