Drexel dragonThe Math ForumDonate to the Math Forum

Ask Dr. Math - Questions and Answers from our Archives
_____________________________________________
Associated Topics || Dr. Math Home || Search Dr. Math
_____________________________________________

Two's Complement


Date: 07/13/99 at 18:48:26
From: Thomas F. Corbin
Subject: Computer programming

What is two's complement and how is it used?


Date: 07/14/99 at 12:03:05
From: Doctor Peterson
Subject: Re: Computer programming

Hi Tom,

Basically, two's complement numbers are a way to encode negative 
numbers into ordinary binary, such that addition still works. It goes 
like this, using a single-byte number for simplicity:

binary:   0    1    2    3     125  126  127  128  129    253 254 255
          +----+----+----+-...--+----+----+----+----+--...--+---+---+
2's comp: 0    1    2    3     125  126  127 -128 -127     -3  -2  -1

This is most effective if you draw it in a circle, so that -1 is 
followed by 0. Essentially, the second half of the number line (255 
being the largest number that can be represented by 8 bits) is taken 
over for negative numbers. Whereas normally (for unsigned numbers) 
there is a break between 127 and 0, at which point in counting there 
is a carry into the missing ninth bit and you "wrap around" like an 
odometer, in signed numbers there is a break between 127 and -128, 
where there is a carry into the "sign bit." Rotate the circle and it 
looks like this:

binary:    128  129    253  254  255  0   1   2   3     125  126  127 
            +----+-...--+----+----+---+---+---+---+--...--+---+----+
2's comp: -128 -127    -3   -2   -1   0   1   2   3     125  126  127 

In binary, the negative numbers are those whose leftmost bit, called 
the sign bit, is 1; positive numbers look just like unsigned numbers:

    00000000 = 0
    00000001 = 1
    ...
    01111111 = 127
    10000000 = -128
    10000001 = -127
    ...
    11111110 = -2
    11111111 = -1

The system is called two's complement because the negative of a number 
is formed by complementing each bit (subtracting it from 1, the "one's 
complement") and then adding 1 to the result:

        11111111
    2 = 00000010
        --------
   -2 = 11111101 + 1 = 11111110

Because of the way the numbers are assigned, adding one in binary 
still adds one to the negative number; in fact, when you add one to 
-1, you get zero (ignoring the carry). To add any two signed numbers, 
you just add the binary values, and again ignore the carry, if any:

       2 = 00000010
    + -3 = 11111101
    ----   --------
      -1 = 11111111

      -2 =    11111110
    + -3 =    11111101
    ----      --------
      -5 = (1)11111011

There are other ways in which negative numbers can be represented, but 
this has become very popular because of the properties I've pointed 
out.

You can find more about this in our archives:

 http://mathforum.org/library/drmath/view/55733.html   

- Doctor Peterson, The Math Forum
  http://mathforum.org/dr.math/   
    
Associated Topics:
High School Calculators, Computers
High School Number Theory

Search the Dr. Math Library:


Find items containing (put spaces between keywords):
 
Click only once for faster results:

[ Choose "whole words" when searching for a word like age.]

all keywords, in any order at least one, that exact phrase
parts of words whole words

Submit your own question to Dr. Math

[Privacy Policy] [Terms of Use]

_____________________________________
Math Forum Home || Math Library || Quick Reference || Math Forum Search
_____________________________________

Ask Dr. MathTM
© 1994-2013 The Math Forum
http://mathforum.org/dr.math/