计算机中带符号的整数表示方法,带符号数的代码表示-数字电子技术-电子发烧友网站...

1.3.1  真值与机器数

上述讨论的过程中都没有考虑二进制数的符号,一般认为其为正数,但在算术运算过程中,总会出现负数。实际上不带符号的数是数的绝对值,在绝对值前加上表示正负的符号(+/- )就成了带符号数。它可由两部分组成:一部分是表示数的符号,另一部分是表示数的数值。由于数的符号是一个具有正、负两种值的离散信息,所以它可以用一位二进制数来表示。通常是以0表示正数,以1表示负数。对于一个n位二进制数,如果数的第一位为符号位,那么余下的n-1位就表示数的数值部分。

一般,直接用正号“+”和负号“-”来表示符号的二进制数,称为符号数的真值。数的真值形式是一种原始形式,无法直接用在数字计算机中。但是,当将符号数值化之后,便可以在计算机中使用它了。因此在计算机中使用的符号数便称为机器数。

如二进制正数+1011在机器中的表示为01011,二进制负数-1011在机器中的表示为11011。

通过前面介绍的二进制数的加、减、乘、除四种运算可知,乘法运算实际上是做左移加法运算,而除法运算则是做右移位减法运算。即在机器中只需要做加、减两种运算。但在做减法运算时,必须先比较两个数绝对值的大小,再将绝对值大的数减绝对值小的数,最后在相减结果的前面加上绝对值较大的数的符号。因此,虽然逻辑电路可以实现减法运算,但所需的电路复杂,运算速度较作加法慢得多。为了能使减法运算变成加法运算,人们给出了三种机器数的表示形式,即原码、反码和补码。

1.3.2  原码

原码又被称为“符号—数值表示”。用当原码形式表示正数和负数的,第1位是符号位。对于正数,符号位表示的0,对于负数,符号位表示的1,其余各位表示数值部分。

假如两个带符号的二进制数分别为S1和S2,其真值形式为

S1= +11001    S2= -01011

则S1和S2的原码表示形式为

[S1]原= 011001    [S2]原= 101011

根据上述原码形成规则,一个n位的整数S (包括一位符号位)的原码一般表达式为

bdae8b5f09e06c24fddf9cf9bb956c2d.gif              (1.3.1)

对于定点小数而言,一般将小数点定在最高位的左边,此时,数值小于1。定点小数原码一般表达式为

6e1e7645a357ecd31bf875ce05a5a9d9.gif                  (1.3.2)

由原码的一般表达式中可以得出:

(1 )当S为正数时,[S]原和S的区别只是增加一位用0表示的符号位。由于在数的左边增加一位0对该数的数值并无影响,所以[S]原就是S本身。

(2 )当S为负数时,[S]原和S的区别是增加了一位用1表示的符号位。

(3 )在原码表示中,有两种不同形式的0,即

[+0]原= 0.00…0

[- 0]原= 1.00…0

1.3.3  反码

反码又称为“对1的补数”。当用反码表示时,左边第1位即为符号位,符号位为0代表正数,符号位为1代表负数。对于正数,反码和原码相同。而对于负数,反码的数值是将原码数值按位求反,即原码的某位为1,则反码的相应位便为0,或者原码的某位为0,反码的相应位便为1。所以,反码数值的形成与它的符号位有关。

假如两个带符号的二进制数分别为S1和S2,其真值形式为

S1= +1l001   S2= -01011

则S1和S2的反码表示形式为

[S1]反= 011001    [S2]反= 110100

根据上述的反码形成规则,一个n位的整数S (包括一位符号位)的反码一般表达式为

f4ed0a81d247afdb47716583671d57d4.gif                   (1.3.3)

同样,对于定点小数,如果小数部分的位数为m,则它的反码一般表达式为

b9158d22d5bbac741358d24349c27a43.gif                      (1.3.4)

从反码的一般表达式可以看出:

(1 )正数S的反码[S]反与原码[S]原相同。

(2 )对于负数S,其反码[S]反的符号位为1,数值部分是将原码数值按位求反。

(3 )在反码表达式中,0的表示有两种不同的形式,即

[+0]反= 0.00…0

[-0]反= 1.11…1

1. 3. 4  补码

补码又称为“对2的补数”。在补码表示方法中,正数的表示同原码和反码的表示是一样的,而负数的表示却不相同。对于负数,将原码转变成补码的规则是:符号位不变,仍为l,数值部分变反加1,即逐位变反,在最低位加1。

如两个带符号的二进制数分别为S1和S2,其真值表达式为

S1= +11001      S2= -01011

则S1和S2的补码表示形式为

[S1]补= 011001    [S2]补= 110101

根据上述补码形成规则,一个n位的整数S (包括一位符号位)的补码一般表达式为

705bd1c3fa9a2aabff0107ab48ff09a1.gif                    (1.3.5)

同样,对于定点小数,补码一般表达式可写成

b158176ac62f69aa28776bfbb2b2aead.gif                         (1.3.6)

由补码的一般表达式可以看出:

(1 )正数S的补码[S]补、反码[S]反和原码[S]原是相同的

(2 )对于负数,补码[S]补的符号位为1,其数值部分为反码的数值末位加1。

(3 )在补码表示法中,0的表示形式是唯一的。即

[+0]补= 0.00…0

[-0]补= 0.00…0

1. 3. 5  机器数的运算

前面介绍了带符号数的三种表示法,由于形成规则不同,加、减运算的规律也不相同。下面分别加以介绍。

一、原码运算

原码中的符号位仅用来表示数的正、负,不参加运算。进行运算的只是数值部分。原码运算时,应首先比较两个数的符号,若两数的符号相同,则可将两个数的数值相加,最后给结果附上相应的符号;若两数的符号不同,则需比较两数的数值大小,然后将数值较大的数减去数值较小的数,并将数值较大的数的符号作为最后结果的符号。下面举例说明。

例1.3.1  已知S1=  0.1001,S2= -0.0101,求[S2+S1  ]原和[S2-S1]原。

解:    [S2+S1]原= [ (-0.0101 )+ (0.1001 )]原

由于S1和S2的符号不同,并且的S1绝对值大于S2的绝对值,因此要进行S1减S2的运算,其结果为正。

1f04c77cea518d0ec85ca99bdd2277cf.gif

运算结果为原码,即

[S2+S1]原= 0.0100

故其真值为

S2+S1= 0.0100

又     [S2-S1]原= [ (-0.0101 )- (0.1001 )]原

由于S1和S2的符号相同,因此,实际上要进行Sl加S2的运算,其结果为负。

2c6cf6411ed5f4c3b0ac81d788ff754f.gif

运算结果为原码,即

[S2-S1]原= 1.1101

故其真值为

S2-S1 = -0.1101

二、反码运算

由反码的定义可以得到反码加、减运算规则如下:

[S2+S1]反= [S2]反+[S1]反

[S2-S1]反= [S2]反+[-S1]反

反码的加、减运算规则表明:两数和的反码等于两数的反码之和,而两数差的反码也可以用加法来实现。运算时,符号位和数值位一样参加运算,如果符号位产生进位,则需将此进位加到和数的最低位,称之为“循环进位”。运算结果的符号位为0时,说明是正数的反码,与原码相同;运算结果的符号位为1时,说明是负数的反码,应再对运算结果求反码,才得到原码。下面举例说明。

例1.3.2  已知S1=  0.1001,S2= -0.0101,求[S2+S1]反和[S2-S1]反。

解:  [S2+S1]反= [S2]反+ [S1]反=  1.1010+0.1001

8c3064d6ab9686189c98a6a0be6c23af.gif

由于符号位产生了进位,因此要进行“循环进位”,即

[S2+S1]反=  0.0100

由于其符号位为0,则其真值为S2+S1=  0.0100

又  [S2-S1]反=  [S2]反+ [-S1]反=  1.1010+1.0110

a355823abb68e188bfb7d31f19c5d41b.gif

由于符号位产生了进位,因此要进行“循环进位”,即

[S2-S1]反=  1.0001

由于其符号位为1,则其真值为S2-S1=  -0.1110

三、补码运算

补码运算同反码运算一样,两数差的补码可以用两数补码的加法来实现。补码加、减运算规则是:

[S2+S1]补=  [S2]补+[S1]补

[S2-S1]补=  [S2]补+[-S1]补

运算时,符号位和数值位一样参加运算,如果符号位产生了进位,则此进位可“略去”。运算结果符号位为0时,说明是正数的补码,与原码相同。运算结果符号位为l,说明是负数的补码,应对结果再求补码才得原码。

下面举例说明。

例1.3.3 已知S1=  0.1001,S2=  -0.0101,求[S2+S1]补和[S2-S1]补。

解:  [S2+S1]补=  [S2]补+[S1]补=  1.1011+0.1001

4d46b96fca9da04ecb83eac44919ee4a.gif

由于符号位产生了进位,因此,要将此进位略去,即

[S2+S1]补=  0.0100

运算结果的符号位为0,说明是正数的补码,补码与原码相同。

由于其符号位为0,则其真值为

S2+S1=  0.0100

又   [S2-S1]补=  [S2]补+[-S1]补=  1.1011+1.0111

710858d279eee1b0de1c16f75f45b324.gif

由于符号位产生了进位,因此,要将此进位略去,即

[S2-S1]补=  1.0010

运算结果的符号位为1,说明是负数的补码,应对补码求补后才能得到原码,即

[S2-S1]原=  1.1110

由于其符号位为1,则其真值为

S2-S1= -0.1110

从上述的讨论可以看出,原码、反码和补码各有优缺点。原码表示法简单方便,但原码减法必须做真正的减法,不能用加法来代替,因此实现原码运算所需的逻辑电路比较复杂。反码和补码的优点是只需用加法逻辑电路便可实现。并且用补码进行减法运算很方便,它只需进行一次算术相加。而用反码进行减法运算,若符号位产生进位就需进行两次算术相加。而且反码还有一个缺点,就是具有两个零值,这容易在计算过程中产生歧意。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值