| |
 |
The 8051
|
|
|
|
| |
Using 2's Compliment for Dealing with Positive and
Negative Numbers |
| |
|
| |
So far, when looking at data stored in RAM we have been thinking of this
data as 8-bit positive numbers with a range of 0 to 255. However, in the
real world most data can be both positive and negative (for example, a range
of temperatures). |
| |
Therefore, we need to examine the system used by microcontrollers for
storing and manipulating positive and negative numbers. |
| |
|
| |
1's Compliment |
| |
To get the 1's compliment of a number each bit is inverted. Three examples
are given in the table below: |
| |
|
| |
| 8-bit number |
1's compliment |
| 11010001 |
00101110 |
| 11111111 |
00000000 |
| 01000110 |
10111001 |
|
| |
|
| |
2's Compliment |
| |
To get the 2's compliment of a number 1 is added to the 1's compliment
of the number. The three examples from the table above are converted into
2's compliment below.
|
| |
|
| |
| 8-bit number |
2's compliment |
| 11010001 |
00101111 |
| 11111111 |
00000001 |
| 01000110 |
10111010 |
|
| |
|
| |
To change the 2's compliment of a number back to its original value, simply
get the 2's compliment again. Try it with the examples above. |
| |
|
| |
|
| |
The Sign Bit |
| |
In the C programming language and in microcontrollers, a signed number
is a number which can be either positive or negative while an unsigned number
can only be positive. |
| |
With signed numbers, the MSB is used to determine whether or not the number
is positive or negative. If the MSB is 0 then the number is positive while
if the MSB is 1 the number is negative. |
| |
Therefore, a positive number is stored unchanged. For example, the signed
number 86 (DEC) is stored the same as the unsigned equivalent (01010110
- is binary for 86). |
| |
However, a negative number is stored as the 2's compliment of its absolute
value. For example, -86 is stored as the 2's compliment of 86 (10101010
is the 2's compliment of 01010110). |
| |
|
| |
|
| |
Converting Signed Binary Numbers to Decimal |
| |
Since an MSB of 0 means a positive number and an MSB of 1 means a negative
number, you may be thinking it is necessary for the system to test the MSB
in order to determine the sign of a number. This is not so. Converting signed
numbers from binary to decimal is exactly the same as converting unsigned
numbers from binary to decimal, except for one small difference - the MSB
is negative. |
| |
-27 26 25 24 23
22 21 20
|
| |
|
| |
|
| |
|
| |
Copyright
(c) 2005-2006 NyCelt LLC
|