1.4.1 无符号数与带符号数
计算机中的数用二进制数形式表示,数的符号也是用二进制表示的。在机器中,一个数连同其符号在内的数值化表示的数称为机器数。机器数可以用不同的码制来表示,常用的有原码、补码和反码表示法。由于8086/8088机中的整数采用补码表示法。这里只介绍整数的补码表示。
1.无符号数的补码表示
到目前为止,我们把二进制数看做无符号数(Unsigned Number),因此,n位二进制数可以表示的无符号数范围为0~2n-1。例如,8位二进制数00H~0FFH表示0~255,16位二进制数0000H~0FFFFH表示0~65535。那么,如何表示负数呢?
2.带符号数的补码表示
8086/8088CPU采用二进制补码表示带符号数(Signed Number),以最高位作为符号位(0表示正数,1表示负数)。例如,对于16位数来说,8000H是负数,0FFFH是正数。具体表示规则为:
正数的补码是其本身;负数的补码是对其正数“各位求反、末位加1”后形成的。我们把“各位求反、末位加1”的操作称为求补。
n位二进制补码数可以表示的带符号数范围为-2n-1~2n-1-1。例如,8位二进制数可以表示-128~127,16位二进制数可以表示-32768~32767,32位二进制数可以表示-2147483648~2147483647。
【例1-16】 若一个十进制数用8位二进制数来表示,
[5]补=00000101B
[-5]补=11111011B
[0]补=00000000B
[-0]补=00000000B
那么,-5的补码是如何得到的呢?计算过程如下:
0000 0101 5的二进制表示
1111 1010各位求反
1111 1011末位加1,得-5的补码
反之,对补码表示的-5进行求补操作,可得到5的补码。计算过程如下:
1111 1011-5的8位二进制补码表示
0000 0100各位求反
0000 0101末位加1,得5的补码
补码具有如下特性:
(1)[x]补[-x]补.
【例1-17】 若一个十进制数用8位二进制数来表示,
[10]补=00001010B
求补后得
[-10]补=11110110B
反之亦然。
(2)[x+y]补=[x]补+[y]补。
(3)[x-y]补=[x]补+[-y]补。
【例1-18】 若一个十进制数用8位二进制表示,实现25减32,可用减法:
其中,向高位的借位丢失。或者转换为如下的加法:
结果相同。
因此,在计算机内部,补码减法是通过对减数求补后,再将减法转换为加法进行的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。