| Integers: signed magnitude | ||||||||||||||
| Signed magnitude | ||||||||||||||
| Reserve one particular bit for the sign. | ||||||||||||||
| Sign bit: If msb is 0, then positive value, if msb is 1, then negative value. | ||||||||||||||
| Converting base 10 to N-bit signed magnitude (SM): | ||||||||||||||
| 1. Ignoring sign, convert base 10 value to binary. | ||||||||||||||
| 2. If less than (N-1) bits, pad rest of bits to (N-1) with 0. | ||||||||||||||
| 3. If negative, set msb to 1. | ||||||||||||||
| Converting N-bit SM to base 10: | ||||||||||||||
| 1. Convert lower (N-1) bits to base 10. | ||||||||||||||
| 2. If msb is 1, put minus sign in front of number. | ||||||||||||||
| Example: | ||||||||||||||
| Convert 3 in base 10 to 4-bit SM: | ||||||||||||||
| binary value: 11 | ||||||||||||||
| using 3 bits: 011 | ||||||||||||||
| with sign bit: 0011 | ||||||||||||||
| Convert -3 in base 10 to 4-bit SM: | ||||||||||||||
| binary value: 11 | ||||||||||||||
| using 3 bits: 011 | ||||||||||||||
| with sign bit: 1011 | ||||||||||||||
| What about 15? | ||||||||||||||
| binary value: 1111 | ||||||||||||||
| However, this is already 4 bits, and the sign bit needs to be 0 for positive value. | ||||||||||||||
| Range of values for SM | ||||||||||||||
| How many possible values (i.e., representations)? | ||||||||||||||
| 2N for N bits | ||||||||||||||
| Maximum value | ||||||||||||||
| 2N-1 - 1 for (N-1) bits | ||||||||||||||
| Minimum value | ||||||||||||||
| -(2N-1 - 1) for (N-1) bits | ||||||||||||||
| Total values, including 0: | ||||||||||||||
| 2 *(2N-1 -1) + 1 = 2N - 1 | ||||||||||||||
| What happened to the extra value? | ||||||||||||||
| There are actually 2 zeroes! | ||||||||||||||
| positive zero: N 0's | ||||||||||||||
| negative zero: 1 followed by (N-1) 0's | ||||||||||||||
| So, total number of representations is 2N, but total number of values is 1 less. | ||||||||||||||
| Disadvantage of SM: 2 zeroes adds complexity to hardware. | ||||||||||||||
| Addition | ||||||||||||||
| It would be nice if we could use the same hardware for signed or unsigned addition. | ||||||||||||||
| However, that is not the case for signed magnitude. | ||||||||||||||
| Consider adding -1 and -1 in 4-bit SM | ||||||||||||||
| 1001 + 1001 = 0010 in 4 bits, since the carry from the msb is lost. | ||||||||||||||
| This gives a result of +2, which is incorrect. | ||||||||||||||
| One way around this is to ignore the sign bit in doing the addition, | ||||||||||||||
| then use the sign bit for the result. | ||||||||||||||
| However, that doesn't work if the sign bits are different. | ||||||||||||||
| The sign bit of the result will depend on the relative magnitudes. | ||||||||||||||
| The magnitude of the result will be the difference in the magnitudes. | ||||||||||||||
| For example, (-5) + 3 is -2, but 5 + (-3) is +2. | ||||||||||||||
| Negation | ||||||||||||||
| Negating a value means giving it the opposite sign. | ||||||||||||||
| This is easy with SM, since we simply flip the sign bit. | ||||||||||||||
| negative value: sign bit 1 --> 0 | ||||||||||||||
| positive value: sign bit 0 --> 1 | ||||||||||||||