One’s Complement and Two’s Complement – Binary Lesson

One’s complement and two’s complement are just two important binary theories. The match is especially important since it allows us to represent signed numbers in binary, and also the match is the interim step to locating the two’s complement. Two’s complement also provides an easier way to subtract numbers together rather than working with the lengthier, more regarding subtraction procedure discussed in Lesson 10. We’ll conserve the two’s complement subtraction for another lesson, but here, we’ll look at exactly what these terms mean and how to compute them.

Binary Lesson

One’s Complement

If all bits in a byte are inverted by changing each 1 to 0 and each 0 to 1, we have formed the one’s complement of the number.

Original One’s Complement
——————————-
10011001 –> 01100110
10000001 –> 01111110
11110000 –> 00001111
11111111 –> 00000000
00000000 –> 11111111

One’s Complement
Converting to one’s complement.

And that is all there is to it! One’s complement is useful for forming the two’s complement of a number.

Two’s Complement (Binary Additive Inverse)

Both complement is a way of representing positive and negative integer values in binary. The most helpful part of two’s complement is that it automatically contains the sign bit.

Rule: To form the two’s complement, add 1 to the one’s complement.

Step 1: Begin with the original binary value

10011001 Original byte

Step 2: Find the one’s complement

01100110 One’s complement

Step 3: Add 1 to the one’s complement

01100110 One’s complement
+ 1 Add 1
———–
01100111 <— Two’s complement

Two’s Complement

What is -65d in binary?

Two’s complement allows us to represent signed negative values in binary, so here is an introductory demonstration on how to convert a negative decimal value to its negative equivalent in binary using two’s complement.

Step 1: Convert 65d to binary. Ignore the sign for now. Use the absolute value. The absolute value of -65d is 65d.

65d –> 01000001b

Step 2: Convert 01000001 to its one’s complement.

01000001 –> 10111110

Step 3: Convert 10111110b to its two’s complement by adding 1 to the one’s complement.

10111110
+ 1
———
10111111 <— Two’s complement

10111111b is -65d in binary. We know this it true because if we add 01000001b (+65d) to 10111111b (-65d) and ignore the carry bit, the sum is 0, which is what we obtain if we add +65 + (-65) = 0.

01000001 +65
+ 10111111 -65
———————
100000000b 0d
^
|
Ignore the carry bit for now. What matters is that original number of bits (D7-D0) are all 0.

We will examine signed binary values in more detail later. For now, understand the difference between one’s complement and two’s complement and practice converting between them.

 

Practice

Convert to one’s complement:

1. 1010
2. 11110000
3. 10111100 11000000
4. 10100001

Convert to two’s complement:

1. 1010
2. 11110000
3. 10000000
4. 011111111

Convert these negative decimal values to negative binary using two’s complement:

1. -192d
2. -16d
3. -1d
4. -0d

Answers

One’s complement:

1. 0101
2. 00001111
3. 01000011 00111111
4. 01011110

Two’s complement:

1. 0110 (1010 –> 0101 + 1 = 0110)
2. 00010000
3. 10000000 (Result is the same as the original value.)
4. 10000001

Negative decimal to negative binary:

1. 01000000b (192d = 11000000b –> 00111111 + 1 = 01000000b)
2. 11110000b (16d = 00010000b –> 11101111 + 1 = 11110000b)
3. 11111111b (1d = 00000001b –> 11111110 + 1 = 11111111b) Tricky? Before converting from binary to decimal, we must know ahead of time if the binary value is signed or not because a signed binary value will not convert properly using the place value chart we have seen so far. If seen by itself, 11111111b = 255d, not -1d. As a rule, assume that a binary value, such as 11111111b, is a positive integer unless context specifies otherwise. Since we are dealing with negative binary values in this problem set, then 11111111b is -1d, not 255d.
4. 0. There is no such thing as negative zero (-0). Nothing is always nothing and does not have a sign. We can convert anyway: 0d = 00000000 –> 11111111 + 1 = 1 00000000b. We still arrive at 0 in binary for the eight relevant bits. Ignore the ninth carry bit.