再看补码

  本来工作内容已经与硬件无关了,但闲暇时突然想到了一个问题,为何要有补码,为何负数的补码=对应的反码+1

  计算机中的运算是交给ALU完成的,ALU中是没有减法操作的,因此如果能用加法代替减法是再好不过的了。恰恰数学中有这样的规则,我们可以利用加负数来代替减正数,因此任务就变成了负数的合理化表示,下面做详细陈述。

  要合理化表示负数,那么就要给出合理化表示的要求:

  负数的合理化表示要求一:与正数的集合没有交集,同样一组01串不会产生歧义,这个不难解决,增添一个符号位即可。

  负数的合理化表示要求二:一个正数与其对应的负数(即数学上的相反数)相加为0

第二点实现不易,因为在只有加法运算的规则下,产生0只能靠0+0或1+1并产生进位,但有一点我们可以利用:那就是计算机是有字长的,只要在字长内的每个位是0即可表示0,哪怕在超出字长的位数中有1。顺着这个思路,我们取最简单情况,利用n位数值为都为0n+1位为1表示0,我们写下如下的表达式:

   n位二进制正数a,其对应的负数为X,表达式为:

a+X=0  --->    a+X=2^(n+1)

后一个表达式已经很接近我们的答案了,但是X依然难以表示,我们依然需要对这个表达式进行合理的变形,等式的右边是2^(n+1),我们最好能将它变形成一个n位二进制数,这样便于下一步变形,那么等式两边同时减一我们得到这样的式子:

              a+X-1=2^(n+1)-1   ---> a+X-1=111111.....(n1)

              -----> y=x-1a+y=11111.......(n1)

结合逻辑运算,我们就可以得到ay的关系,a=y。则

x-1=a

则:x=a+1,别忘了a就是a的反码,这样我们的到了一种合理的负数表示法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值