关于2的补码

上传人:j****9 文档编号:46336163 上传时间:2018-06-25 格式:DOC 页数:6 大小:34KB
返回 下载 相关 举报
关于2的补码_第1页
第1页 / 共6页
关于2的补码_第2页
第2页 / 共6页
关于2的补码_第3页
第3页 / 共6页
关于2的补码_第4页
第4页 / 共6页
关于2的补码_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《关于2的补码》由会员分享,可在线阅读,更多相关《关于2的补码(6页珍藏版)》请在金锄头文库上搜索。

1、关关于于2 的的补补码码作者: 阮一峰日期: 2009 年 8 月 5 日问一个基本的问题。负负数数在在计计算算机机中中如如何何表表示示?举例来说,+8 在计算机中表示为二进制的1000,那么-8 怎么表示呢?很容易想到,可以将一个二进制位(bit)专门规定为符号位,它等于0 时就表示正数,等于1 时就表示负数。比如,在8 位机中,规定每个字节的最高位为符号位。那么,+8 就是 00001000,而-8 则是 10001000。但是,随便找一本计算机原理,都会告诉你,实际上,计算机内部采用2 的补码(Twos Complement)表示负数。什什么么是是 2 的的补补码码?它是一种数值的转换方

2、法,要分二步完成:第一步,每一个二进制位都取相反值,0 变成 1,1 变成 0。比如,00001000 的相反值就是11110111。第二步,将上一步得到的值加1。11110111 就变成 11111000。所以,00001000 的 2 的补码就是11111000。也就是说,-8 在计算机(8 位机)中就是用 11111000 表示。不知道你怎么看,反正我觉得很奇怪,为什么要采用这么麻烦的方式表示负数,更直觉的方式难道不好吗?昨天,我在一本书里又看到了这个问题,然后就花了一点时间到网上找资料,现在总算彻底搞明白了。2 的的补补码码的的好好处处首先,要明确一点。计算机内部用什么方式表示负数,其

3、实是无所谓的。只要能够保持一一对应的关系,就可以用任意方式表示负数。所以,既然可以任意选择,那么理应选择一种最方便的方式。2 的补码就是最方便的方式。它的便利体现在,所有的加法运算可以使用同一种电路完成。还是以-8 作为例子。假定有两种表示方法。一种是直觉表示法,即10001000;另一种是2 的补码表示法,即 11111000。请问哪一种表示法在加法运算中更方便?随便写一个计算式,16 + (-8) = ?16 的二进制表示是 00010000,所以用直觉表示法,加法就要写成:可以看到,如果按照正常的加法规则,就会得到10011000 的结果,转成十进制就是-24。显然,这是错误的答案。也就

4、是说,在这种情况下,正常的加法规则不适用于正数与负数的加法,因此必须制定两套运算规则,一套用于正数加正数,还有一套用于正数加负数。从电路上说,就是必须为加法运算做两种电路。现在,再来看2 的补码表示法。可以看到,按照正常的加法规则,得到的结果是100001000。注意,这是一个9 位的二进制数。我们已经假定这是一台8 位机,因此最高的第9 位是一个溢出位,会被自动舍去。所以,结果就变成了00001000,转成十进制正好是8,也就是 16 + (-8) 的正确答案。这说明了,2 的补码表示法可以将加法运算规则,扩展到整个整数集,从而用一套电路就可以实现全部整数的加法。2 的的补补码码的的本本质质

5、在回答 2 的补码为什么能正确实现加法运算之前,我们先看看它的本质,也就是那两个步骤的转换方法是怎么来的。要将正数转成对应的负数,其实只要用0 减去这个数就可以了。比如,-8 其实就是 0-8。已知 8 的二进制是00001000,-8 就可以用下面的式子求出:因为 00000000(被减数)小于0000100(减数),所以不够减。请回忆一下小学算术,如果被减数的某一位小于减数,我们怎么办?很简单,问上一位借1就可以了。所以,0000000 也问上一位借了1,也就是说,被减数其实是100000000,算式也就改写成:进一步观察,可以发现100000000 = 11111111 + 1,所以上面

6、的式子可以拆成两个:2 的补码的两个转换步骤就是这么来的。为为什什么么正正数数加加法法适适用用于于2 的的补补码码?实际上,我们要证明的是,X-Y 或 X+(-Y)可以用 X 加上 Y 的 2 的补码完成。Y 的 2 的补码等于(11111111-Y)+1。所以,X 加上 Y 的 2 的补码,就等于:X + (11111111-Y) + 1我们假定这个算式的结果等于Z,即 Z = X + (11111111-Y) + 1接下来,分成两种情况讨论。第一种情况,如果X 小于 Y,那么 Z 是一个负数。这时,我们就对Z 采用 2 的补码的逆运算,求出它对应的正数绝对值,再在前面加上负号就行了。所以,Z = -11111111-(Z-1) = -11111111-(X + (11111111-Y) + 1-1) = X - Y第二种情况,如果X 大于 Y,这意味着Z 肯定大于 11111111,但是我们规定了这是 8 位机,最高的第9 位是溢出位,必须被舍去,这相当于减去100000000。所以,Z = Z - 100000000 = X + (11111111-Y) + 1 - 100000000 = X - Y这就证明了,在正常的加法规则下,可以利用2 的补码得到正数与负数相加的正确结果。换言之,计算机只要部署加法电路和补码电路,就可以完成所有整数的加法。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号