对计算机补码的一些理解

一、Let’s go

假定我们用4bit来表示一个数据,那么该怎么只用加法(而不用减法),来计算6(0110)-3(0011)呢?

假设最终的结果为x,因为数据用4位表示,可以得到:

x=(0110-0011)mod 2^4 =   (0110-0011+2^4)mod 2^4
= (0110+1101) mod 2^4=0011
(注意,上式中 [-0011]补 =1101)

所以,当我们计算 x=a-b 时(a>=0,b<0,数据字长为n),只需要计算 x=a+(2^n-b) 就行了。

但是如果这样的话,问题又来了,我们引入了新的减法 — 2^n-b,而这与我们最初的目的背道而驰。不过幸运的是,我们可以用一个小技巧来代替这个减法。

同样的,我们用4bit来表示数据,求对0110(十进制数6)按位取反后的结果:
容易得到结果是1001(十进制数9)

一般的,对于一个n位表示的数a,对a按位取反得到的结果是2^n-a-1。

所以,如果我们要计算2^n-b,只需要对b按位取反后加1就行了(感觉很熟悉是吧,对,没错,这就是补码的计算方式,按位取反后加1),也就是说,2 ^n-b就是b的补码。

现在,当我们用补码来表示数据时,对于一个数b的减法逆元-b(这两个数满足: b+(-b)=0),我们可以得到:

 -b= 2^n -b 		(b!=0)
 -b=0			(b=0)

现在,当我们计算 x=a-b时,只需要计算a+b按位取反+1就行了

二、无符号数

对于一个n位表示的数据:X=Xn-1Xn-2······X1X0
我们可以轻松的得到X的大小,即

X= Xn-1*2^(n-1) + Xn-2*2^(n-2) +······+ X0*2^0

为了简便起见,我们同样用4bit来表示数据,我们令a=1010(十进制数10),b=0011(十进制数3)
无符号数加减可以分为4种情况(因为是无符号数,所以a和b都是正数,-a-b和-a+b小于0,会发生下溢,在本篇中,我们不讨论数据溢出的问题,因此下文只讨论两种情况)

(1)计算x=a+b
这个很简单啦,就是单纯的性价就好啦
可以得到x=1101(十进制数13)
(2)计算x=a-b
这个也是so easy,运用前文得出的结论:-b=2^n-b
得到x=1010+1101=0111(十进制数7)
注意,要想最终得到正确的结果,即a-b不发生溢出,需要0<=a<=b<=2^n -1

三、有符号数

同样的,我们还是用4bit来表示数据
令a=0101(十进制数5),那么我们可以得到-a(即-5)=1011
也就是说1011可以表示-5或11,而某一时刻,1011究竟表示什么,取决于我们是怎么看待数据1011的。

有两中看待数据的方法,一种就是上文提到的无符号数,在这种情况下,二进制字符串所代表的数据都是正数(1011代表11)
另一种则是将数据当作有符号数来看待,在这种情况下,我们规定0000-0111表示正数(0-7),而1000-1111表示负数(-8到-1)。此时1011代表-5。因为最高位恰好可以表示数的正负(0-正数,1-负数),我们也可以将其称为符号位)

概括地来说就是,
因为 0110(十进制数6)- 0101(十进制数5)
= 0110(十进制数6)+ 1011(十进制数11)
我们发现1011能够起到-5的作用,也就是说,1011在某种程度上和-5是等价的。因此我们根据当前的需求,以不同的角度来看待1011,当我们需要11是,我们用有符号数的角度来看待1011;当我们需要-5时,我们以有符号数的角度来看待1011.

对于一个n位表示的数据:X=Xn-1Xn-2······X1X0
我们可以得到X的大小,除最高位外(-2^^n-1),其他每一位的权值与无符号数相同

X= Xn-1*-2^(n-1) + Xn-2*2^(n-2) +······+ X0*2^0

那这个公式是怎么来的呢?
我举一个很简单的例子
1011的有符号数表示和无符号表示正好相差16,即2^n
具体原理也很简单,我就不阐述了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值