2的补码

下面介绍2的补码记数法

图1显示了两个完整的2的补码系统:一个是基于长度为3的位模式,

另一个是基于长度为4的位模式。

这种系统的构造方法是:从相应长度的0的串(例子中用3位和4位)开始,

用二进制记数的方式一直记数到位模式是由一个0后面跟随尽可达到的数目1组成(列中是011和0111)为止。

这些位模式表示值0,1,3,…。表示负数的位模式是通过从相应长度的1的串开始,然后用二进制倒记数的方式记数,

一直到位模式是由一个1和随后尽可能达到的数目0所组成为止。

这些位模式表示值-1,-2,-3,…。

如果这种倒记数的方法使用时太困难,也可以从表最底部的位模式开始,

向上记数。即从由一个1和随后尽可能达到的个数0组成的位模式开始一直到全

由1组成的位模式为止。

图一

注意:在2的补码系统中,一个位模式最左边的位指示被表示数值的符号。因此,最左边的位被称为符号位。

负值是用符号位为1的位模式来表示,非负值是由符号位为0的位模式来表示。

在2的补码系统中,表示相同幅度的正负值的模式之间存在着简便的关系。从右至左读位模式,直到包括第一个1时,

它们是等同的。继续读位模式,则相互之间就互补了(一个模式的补是由模式中的所有的0变为1、所有的1变为0而得到,

0110和1001是互补的)。例如,图1的4位长模式中表示2和-2的模式都是以10结束,但是表示2的模式是以00开始,

而表示-2的模式以11开始。这个观察引出了表示相同幅度的正值和负值的位模式之间进行相互转换的一个算法,

即对原位模式从右向左逐位拷贝直到有一个1被拷贝为止,然后对原位模式中余下来的部分求补,把求补结果做拷贝,如图2所示。

图2

在熟悉了2的补码系统的这些特性基础上便可引出对2的补码表示形式解码的算法。如果待解码的位模式有为0的符号位,

该位模式就好像是二进制表示形式,只需直接读出它的值。例如,0110表示值6,因为0110是6的二进制表示形式。

如果待解码的位模式符号位为1,则表示是个负值,并且所有余下的部分表示数值的大小。其做法是:从右向左拷贝原位模式,

直到有一个1被拷贝为止,然后对原位模式中余下来的部分求补,最后把所得到的模式当做是二进制表示形式进行解码。

例如,解码模式1010,因为符号位为1,则表示的是个负值。因此,将这个模式转换为0110,此模式代表6,从而得出原来的模式表示-6。

(2) 2的补码记数法中的加法

要加由2的补码记数法表示的数值,除了所有的位模式包括答案在内,都运用了与二进制加法相同的算法。

这就意味着在2的补码系统中进行加法时,最后的进位在答案的左端产生的附加位一定要舍去。于是,加0101和0010得0111;

加0111和1011结果是0010(0111+1011=10010,舍去最左边的1,结果为0010,长度保持4位)。根据这种理解,

考察图3中的三个加法问题。在每一种情况中,已经把问题转换成2的补码记数法(使用4位长的位模式),执行前面描述的加法过程,

并且将结果解码返回到常用的基数10的记数法。

贴图3

采用2的补码记数法的机器需要知道的只是如何去加和求反就够了。例如,减法问题7-5与加法问题7+(-5)是相同的。

因此,如果机器被请求从7(存储为0111)中减5(存储为0101),它首先将5改变为-5(表示为1011),

然后执行0111+1011的加法过程取得0010,它表示2。

Trackback: https://www.360docs.net/doc/84814725.html,/TrackBack.aspx?PostId=672444

相关主题
相关文档
最新文档