找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3277|回复: 4
打印 上一主题 下一主题
收起左侧

二进制补码就是这么回事

[复制链接]
跳转到指定楼层
楼主
ID:74985 发表于 2015-3-21 03:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下内容转自百度知道,回答者:金的同位素。

            
    说到二进制补码,大家都知道:有符号数的负数的补码是 其正数的反码+1,例如 10001111 的补码是反码01110000 加 1 =01110001 ,很多书都这么说,可是为什么这样计算的结果就是它的补码?为什么要用补码?很多书要么不解释,要么就是说:这是因为在计算机内补码计算最快。(其实是补码计算指令的CPU设计更容易实现) 最初我看的书,《大学计算机基础教程》(我非计算机专业),这破书说不清,道不明,给与我非常严重负面的影响,以至于我在以后的计算机学习过程中,程序设计中遇到大大小小不少麻烦和迷茫。
            
    在某些计算机组成原理书上提到:其实补码的计算原理,是用一个模来减去无符号的正数部分。譬如时钟,12点之后是13点,但是时钟上没有13点怎么办?就用13减去12=1点。这个模是12.可惜这个比喻并不是很好。
            
    请看 一个字节长的无符号数的表示范围 :0~255,有符号数的表示范围:-128~127 , 注意,这个表示范围的写法极有可能影响我们的思维,从而导致错误。我们应该这样来写:0~127 ~ -128 ~ -1 ,这才是较好的写法。为什么?因为这个写法的数的顺序与0~255 一一对应。
            
    由上,我们了解,其实补码不过是用128 ~ 255 这段范围的数来表示 ~128 ~ -1这段范围的负数。那么我们就可以凭自己,而不是看教材,就可以推测出计算补码的公式,就是:256-欲求的负数的绝对值= 此负数的补码。
            
    没错,就是这么简单的东西,可是却困扰了很多人。可见有个好的教材是多么的重要。
            
    至于前面 “负数的补码是 其正数的反码+1” , 极为垃圾的教材才会把这个计算方法作为初始方法来教。因为这个计算方法屏蔽了补码的计算原理。其实这不过是 “256 - 欲求的负数的绝对值 = 此负数的补码”的一个比较取巧的计算方法而已。请看 256=1 0000 0000 =1111 1111+1,而 1111 1111减任何二进制数的结果就是把这个数取反,那么 256 - 某二进制数A 既是:将 A取反 +1
            
以上:完毕!
            
注:所有讨论均在字节长范围内(8bit) 进行

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:656070 发表于 2019-12-10 11:31 | 只看该作者
学习了,不错不错,有见解
回复

使用道具 举报

板凳
ID:97023 发表于 2020-2-21 18:25 | 只看该作者
受教了,谢谢,不过这一段可能打字出错了:
“由上,我们了解,其实补码不过是用128 ~ 255 这段范围的数来表示 ~128 ~ -1这段范围的负数。那么我们就可以凭自己,而不是看教材,就可以推测出计算补码的公式,就是:256-欲求的负数的绝对值= 此负数的补码。”
其中:“~128 ~ -1这段范围的负数。”
是否应该为:“-128 ~ -1这段范围的负数。”
第一个符号应该是:“-”
如有不当,请忽略。
回复

使用道具 举报

地板
ID:149799 发表于 2020-2-21 21:30 | 只看该作者
是不是总数0~255,以正负127的中点,即128点作为0点,把129作为+1,把127作为-1。把总数的0点作为-127点,是不是这个意思,望大师解答。
回复

使用道具 举报

5#
ID:562994 发表于 2020-2-24 03:04 来自手机 | 只看该作者
终于明白了,谢谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表