To store signed integers, we need to reserve one bit for the sign of the integer. It is usual convention to use a 0 bit to indicate positive sign and a 1 bit to indicate a negative sign.
Taking the bit numbering as [B2 B1 B0] and reserving the leftmost bit for the sign, we can associate a value of N with each pattern as
N = (-1)^{B2} * (B1 * 2^{1} + B0 * 2^{0})
This results in the following values for each of the 8 bit patterns.
000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
+0 | +1 | +2 | +3 | -0 | -1 | -2 | -3 |
This simplistic scheme (known as “sign + magnitude” scheme) has two main problems. First, there are two zeros, i.e., a +0 and a -0. Second, we get only 7 integers being represented by 8 binary patterns because of the wasted pattern for the -0. The 2s-complement scheme solves this problem. Let us see how negative integers are stored in the 2s-complement scheme. If we have to store -2 in 3 bits, we first find the binary pattern for +2.
binary pattern for +2 010
next we take its ls-complement by changing all ls to 0s and all 0s to 1s (i.e., flipping or toggling all its bits).
Taking ls-complement 101
The last step is to add 1
Adding 1 to 101, we get 110
The complete listing is shown in Table for 3 bits and in Next Table for 4 bits.
Table Signed 3-bit Integer Representation (2s-cornplernent)
000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
0 | 1 | 2 | 3 | -4 | -3 | -2 | -1 |
We have represented the unsigned integers from -4 (= -2^{2}) to 3 (=2^{2}-1) using three bits. By extending this scheme to K bits, we see that we can store unsigned integers from a minimum of (-2^{K-1}) to a maximum of (2^{ K-1} – 1). The 16 signed numbers possible for a 4 bit representation are shown in Table
Table Signed 4-bit Integer Representation (2s-cornplernent)
Binary | Decimal | Binary | Decimal |
0000 | 0 | 1000 | -8 |
0001 | 1 | 1001 | -7 |
0010 | 2 | 1010 | -6 |
0011 | 3 | 1011 | -5 |
0100 | 4 | 1100 | -4 |
0101 | 5 | 1101 | -3 |
0110 | 6 | 1110 | -2 |
0111 | 7 | 1111 | -1 |
Let us revise what we have learnt taking a one byte representation of an integer as an example. If we need to store only unsigned integers, then it is possible to store integers ranging from 0 (corresponding to the binary value 00000000 and it’s equivalent hexadecimal value of 00) to 255 (corresponding to the binary value 11111111 and it’s equivalent hexadecimal value of FF). Therefore, there are 256 different integers which can be stored in this one byte unsigned integer representation which correspond to the 256 different bit patterns that can be generated using 8 bits (256 = 2^{8}).
But, if we want to store signed integers, the maximum positive integer that can be represented using 7 bits is 127 (corresponding to the binary value 01111111 and its equivalent hexadecimal value of 7F). The negative integers are stored using a 2’s complement representation and the minimum negative integer works out to be -128 (corresponding to the binary value 10000000 and its equivalent hexadecimal value of 80). The correspondence of the various bit patterns with the unsigned and signed integers is represented in Table.
Notice the unusual correspondence between the signed and the unsigned integers. The unsigned integer 128 corresponds to the signed integer value of -128 and the unsigned integer 255 corresponds to the signed integer value of -1.