1.4 带符号数的表示及转换(8位)

计算机(或PLC)中要表示的数有不带符号数(没有正负之分,只有零和正数)和带符号数(有正有负有零),不可能用正号或负号来表示一个数的极性。如图1-3所示,最右边的最低位标为b0(称为第0位,不是第1位),最高位标为b7(称为第7位)。

1.不带符号数的表示

8位全用来表示大小,可以表示的十进制数的范围是0~255。

例:01001101=4DH=77。11111111=FFH=255。01111111=7FH=127。10000000=80H=128

2.符号数的表示

如果用8位二进制数表示有正有负的数,就需要用8位中的一位表示数的正负。规定:最高位b7是符号位,b7=0表示“+”,b7=1表示“-”。其余各位(b6~b0)为数值位。对于数值位,又有如下的原码、反码、补码之分:

(1)原码 其余各位(b6~b0)表示该数的绝对值。原码所能表示十进制数的范围是-127~+127。

978-7-111-38174-7-Chapter01-23.jpg

(2)反码 正数的反码与原码相同,负数的反码:符号位(b7)仍为1,其余各位是将该负数的原码对应的各位取反。

978-7-111-38174-7-Chapter01-24.jpg

(3)补码 正数的补码与原码相同,负数的补码:符号位(b7)仍为1,其余各位是将该负数的反码末位加1。

方法一:(X)补=(X)反+1

978-7-111-38174-7-Chapter01-25.jpg

8位二进制数补码可以表示的十进制数的范围是+127~-128(01111111~10000000或7FH~80H)

可以看出,正数的原码、反码、补码都是相同的,负数的原码、反码、补码各不相同。由负数的原码求补码,除了先由原码求反码,再由反码求补码的方法之外,还可以直接由原码求补码:

方法二:利用公式(-X)补=100H-X。注意,式中-X是负数,X是正数。

由于8位二进制数补码所能表示的负数范围是-1~-128,此公式只适用于计算-1~-128的负数的补码。如果要计算16位二进制数负数的补码,应当用公式(-X)补=10000H-X

978-7-111-38174-7-Chapter01-26.jpg

可以看到,负数的绝对值越小,它的补码看起来越大。

3.转换(只适用于负数)

(1)反→原反反得原((X)反)反=(X)原

(2)补→原补补得原((X)补)补=(X)原

另外,还有一个规律:(XY)补=(X)补+(-Y)补,由于计算机中的硬件电路只有加法器(全加电路),没有减法电路,这个规律可以把减法化为加法来计算,所以计算机中的数,如果不特别声明,一律是补码。

例:((-86)补)补=(10101010)补=11010110=(-86)原

例:X=34,Y=68,则X-Y=-34在计算机中的结果为(-34)补=100H-22H=DEH=11011110

实际上,在计算机中(XY)补=(34-68)补=(34)补+(-68)补=22H+BCH=DEH=11011110

也可直接相减:34-68=22H-44H=DEH=11011110