The ones complement of a number is represented by flipping the number's bits one at a time. For example, the value 01001001 becomes 10110110.
Suppose you are working with B-bit numbers. Then the ones complement for the number N is
2B2B size 12{2 rSup { size 8{B} } } {}-1 -N
The twos complement of a number N in a B-bit system is
2B2B size 12{2 rSup { size 8{B} } } {}-N.
There is a simple way to calculate a twos complement value: invert the number's bits and then add 1.
For a concrete example, consider the value 17 which is 00010001 in binary. Inverting gives 11101110. Adding one makes this 11101111.
- Twos Complement Representation
Like sign magnitude, twos complement representation uses the most significant bit as a sign bit, making it easy to test whether an integer is positive or negative. It differs from the use of the sign-magnitude representation in the way that the other bits are interpreted.
Consider an n-bit integer. A, in twos complement representation. If A is positive, then the sign bit an-1 is zero. The remaining, bits represent the magnitude of the number in the same fashion as for sign magnitude:
A=∑i=0n−2ai2iA=∑i=0n−2ai2i size 12{A= Sum cSub { size 8{i=0} } cSup { size 8{n - 2} } {a rSub { size 8{i} } 2 rSup { size 8{i} } } } {} If
an−1=0an−1=0 size 12{a rSub { size 8{n - 1} } =0} {}
The number zero is identified as positive and therefore has a 0 sign bit and a magnitude of all 0s. We can see that the range of positive integers that may he represented is from 0 (all of the magnitude bits are 0) through - 1 (all of the magnitude bits are 1). Any larger number would require more bits.
For a negative number A (A < 0), the sign bit, is one. The remaining n-1 bits can take on any one of
an−12n−1an−12n−1 size 12{a rSub { size 8{n - 1} } 2 rSup { size 8{n - 1} } } {} values. Therefore, the range of negative integers that can be represented is from -1 to -
2n−12n−1 size 12{2 rSup { size 8{n - 1} } } {}
This is the convention used in twos complement representation, yielding the following expression for negative and positive numbers:
A
=
−
2
n
−
1
a
n
−
1
+
∑
i
=
0
n
−
2
a
i
2
i
A
=
−
2
n
−
1
a
n
−
1
+
∑
i
=
0
n
−
2
a
i
2
i
size 12{A= - 2 rSup { size 8{n - 1} } a rSub { size 8{n - 1} } + Sum cSub { size 8{i=0} } cSup { size 8{n - 2} } {a rSub { size 8{i} } 2 rSup { size 8{i} } } } {}
The range of A is from -
2n−12n−1 size 12{2 rSup { size 8{n - 1} } } {} to
2n−12n−1 size 12{2 rSup { size 8{n - 1} } } {} -1.
Example: Using 8 bit to represent
+50= 0011 0010
-70=1011 1010