为什么 负数原码取反+1 = 补码 ???

1. 如何取得反码

假如一串数字中只有m,n这两个数,那么mn我们如何取反

我们需要用m+n这个和来减去每一位就能得到nm,就得到反了

在二进制中除了0就是1,取反就更简单了

于是就有0101取反,使用1+0=1减去每一位

1111-0101=1010

2. 补码来历

补码的来历是使计算机只用加法器(减法器实现复杂费时,需要判断绝对值大小,然后大的减去小的,再让符号以大的为准)

假设6点,我们需要到3点有两种方式(倒流,快进)

  • 时间倒流3个小时,记为 -3
  • 时间快进9个小时,记为 +9

所以这里 6 ”-3” = 6 “+9” =3 (12小时制时钟 , 到了12自动清0)-3和+9是等价的,也就是说减法可以用加法来做

3. 为什么是补码快捷计算是 反码+1

 从时钟我们可以得到一个结论,

  1.  负数+模=该负数补数,如-3+12=9
  2. 一正一负如果互为补数, | 正 | + | 负 |= 模,如3+9=12

那么计算机存储与时针是相似的

计算机中数均放在寄存器中,通常称寄存器中的位数为机器字长

假如机器字长是2(一位符号位),一旦到了2就自动清0

假如机器字长是5(一位符号位),一旦到了16就自动清0

由结论1:

1,1011 的补码 公式-1011+ 10000=0101

但是问题是0,0101的补数为也为 0101

所以对于

  • 正数的补数我们写成 0,0101
  • 负数的补数我们写成 1,0101

 那么我们如何对正数补数添0,负数补数添1?

第五位的权值为24,所以我们还需要加24

-1011的补码为 :-1011+ 10000 + 10000= -1011+100000 = 1,0101

+1011的补码为 :+1011+ 10000 + 10000= +1011+100000 =101011=0.0101

这就完成了目的

 

最后我们得出补码的公式为:

该数补数

= 2n+1 + 该数

= 1111111...+1+该数

=(111111....+该数)+1

=  反码 +1 (由第一个可知)

 

 


转载于:https://www.cnblogs.com/hhhhhhhhhb/p/11249883.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值