二进制表示---补码之我想

对于计算机来说数字电路实现加法是很容易的:
比如:
(01010000)+(10000001)=11010001;可以用最基本电路搭建出来。
但是减法,或者说负数储存该如何储存的问题,不合适的解决方案会导致加减出现麻烦;
1. 便于直观:八位我们用其中最高位表示符号位,1就是00000001,-1就是10000001,可是这样我们却不能直接相加,否则1+-1=-2;显然不可以。(这种表示方式称为原码)

2.那么该怎么办,那么先不考虑二进制的负数表示,先假设八位全部用来储存值的大小,如255为11111111;
那么如何将十进制负数储存并便于加减呢?我们来看10进制下的加减表达方案:
如:两个八位二进制位表示的加减运算,借用溢出位。
10+(-2)
=10+-2+256-256
=10+254-256
=8+256(溢出值)-256
=8
从计算过程来看,-2+256的意义便是将2的二进制表示取反+1(基于K+~K+1=256),然后相加。值得注意的是,现在-2表示方式未知。这也就是说如果我们在计算机里储存-2时,直接将其储存为其正数二进制的反码加1,相加后最后的结果仍然是正确的,加减溢出位并不会影响实质上二进制的结果。这就是说,-2和254的储存方式是一致的,同理-n和256-n是一致的。

遵循这样的方式
借用溢出位,导致了254的储存和-4是一致,就会有一个问题,到底算哪个,
问题如下:
-2+-2
=-2+256+-2+256-256-256
=254+254-256-256
=252-256
=252
=-4
为了解决这一引出的问题,我们发现让表示值属于绝对值小的,比如11111111属于-1,即牺牲了八位的表示范围(原来+255,现在正数最大128)换来了负数加的便捷。这时,加减时运算便没了问题。称这种表示方式为补码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值