A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Jordon 中级黑马   /  2012-10-10 16:24  /  1100 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这是在网上搜的,分享一下,大家能看懂吗?
   其实补码的计算原理,是用一个模来减去无符号的正数部分。譬如时钟,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。

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马