下面介绍 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: http://tb.blog.csdn.net/TrackBack.aspx?PostId=672444