带符号数的补码
email:778138708@qq.com
- 正数的补码与其原码相同,最高位为符号位,其他各位为数值位。
- 负数的补码为它的反码加1。
[+0]补 = [+0]原 = 00000000
[-0]补 = [-0]反 + 1 = 11111111 + 1 = 00000000
带符号数的补码表示的数值范围
1000 0001B为-127的补码
1000 0000B为-128的补码
带符号数补码的特点
- 0的补码表示是唯一的,没有+0和-0之分。
- 一个字节的有符号二进制数的补码所能表示的范围为:-128 ~ +127。
- 字的补码表示范围为:-32768 ~ +32767。
带符号数补码的位权
-128的补码为1000 0000B
一个字节的带符号数的补码的位权
-27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 |
---|---|---|---|---|---|---|---|
-128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
例 通过补码求真值,补码10010101B = -27 + 24 + 22 + 20 = -107D
比较无符号数和有符号数的位权
- 无符号数的位权
27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 |
---|---|---|---|---|---|---|---|
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
有符号数补码11101010的真值为:-27 + 26 + 25 + 23 + 21 = -22D
有符号数补码01101010的真值为:26 + 25 + 23 + 21 = 106D
补码转换为真值
- 补码转为原码,求真值:再次取补得到它的原码,再转换为真值。
例 已知[X]补 = 11101010,求X的真值。
解:
原码为:10010101 + 1 = 10010110
真值为:-(24 + 22 + 21)= -22
- 利用补码的位权,求真值。
补码11101010的真值 = -27 + 26 + 25 + 23 + 21 = -22D