负数的二进制补码设计原理

转载:负数的二进制补码设计原理 - AHAU航哥 - 博客园

大家都知道:有符号数的负数的补码是 其正数的反码+1,例如 10001111 的补码是反码01110000 加 1 =01110001 ,很多书都这么说,可是为什么这样计算的结果就是它的补码?


    在某些计算机组成原理书上提到:其实补码的计算原理,是用一个模来减去无符号的正数部分。譬如时钟,12点之后是13点,但是时钟上没有13点怎么办?就用13减去12=1点。这个模是12.可惜这个比喻并不是很好。
            
     一个字节长的无符号数的表示范围 :0~255,有符号数的表示范围:-128~127 , 注意,这个表示范围的写法极有可能影响我们的思维,从而导致错误。我们应该这样来写:0~127 ~ -128 ~ -1 ,这才是较好的写法。为什么?因为这个写法的数的顺序与0~255 一一对应。
            
    由上,我们了解,其实补码不过是用128 ~ 255 这段范围的数来表示 ~128 ~ -1这段范围的负数。那么我们就可以凭自己,而不是看教材,就可以推测出计算补码的公式,就是:256-欲求的负数的绝对值= 此负数的补码。

如上图所示:255(1111 1111)应该用来表示 -1  。 正1的反码为  254(1111 1110) 表示的是 -2 。

因此 正1的反码(254) 再加上1 等于 255(表示-1)。  

如果 255表示 -0 那么。二进制负数  =  其绝对值的反码

如果 255表示 -1 那么。二进制负数  =  其绝对值的反码+1.(把它称为补码)

同理 255如果表示 -2 那么。二进制负数  =  其绝对值的反码+2.

这样使得,最高位既能参与运算,又当做正负号使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值