【译文】补码--理论和示例

原文地址戳这里

补码表示是数值计算中的一个基本技术,它使得减法操作可以用加法操作来替换。

这篇文章首先用几个例子来回顾补码表示的理论。然后,我们将简单地讨论加法器/减法器的框图。

补码表示是数字计算机表示有符号整数的一种方式。补码表示的主要目的是用加法操作来代替减法操作。通过这种方式,我们可以用同样的电路来处理加法和减法。因此,可以减少门电路的数目,从而减少整个电路系统的大小,能耗。事实上,如果不使用补码表示,我们只能用一种类似平时手算十进制数的方式,这需要两种不同的门电路块来计算加法和减法。此外,在计算之前,还需要一些执行逻辑判断。

知识背景:无符号数的计算

假设我们有一个加法器,输入是两个4比特无符号数,a=a3a2a1a0 和 b=b3b2b1b0,还有一个进位输入信号cin,然后计算它们的和 a+b+cin。要怎么用这个加法器来实现减法操作呢?比如,S = a - b? 在S上减去一个常数M,再减去M, S的结果不变:

当M足够大时,可得:

所以等式1可以写成:

等式3需要一个加法操作和一个减法操作。另外,为了计算B,还需要一个减法操作。看上去把运算变得更加复杂了,因为只需要一个减法操作,而等式3需要一个加法操作,两个减法操作。但是,等式3计算需要的两个减法都是减去同样的常数M, 我们是否能找到一个合适的M,来简化等式2和等式3中的减法操作。如果可以,就能用等式3达到用加法实现减法的目的。所以问题变成:常数M的合适值是多少?在后文会被证明,对于k比特的数,

假设一个4比特无符号数b, 测试减法 .
,所以 。
为了简化运算,可以把M写成 ,代入等式2:

可以很简单地计算,因为事实上是对b按位取反。假设,则

可以看出,括号里的减法其实是b按位取反。因此,要算,只需要对b按位取反再加上. 在后文会提到,从实现的角度,对一个数的按位取反加上是很简单的

得到B之后,可以用加法器计算等式3中的a+B。为了得到最后的结果,还需要把a+B的结果减去M。在上面的例子中,我们考虑的是4比特的无符号数,因此,S能取得最大值时,应该是和,得到. 所以4比特是足够表示4比特减法的。选择 ,加上M或者减去M,只能影响第5位比特的值。所以,,第5位比特值改变第一次。接着,,第5位比特值改变第二次。因为是二进制,则第5位比特值没有改变,所以当计算时,只需要丢弃的第5位比特值即可。事实上,这等价于对作模M运算,限制的值小于等于M-1

上述讨论总结为:如果a和b是两个k比特的无符号数,则a-b等价于计算a加上M-b,然后丢弃第k+1位比特值。在这里M等于

在模M运算中,M-b被称为b的补码(two's complement). 一个数的补码可以通过对这个数按位取反再加1得到。

例子1

a,b均为无符号4比特数,用补码表示计算a-b,,

因为是4比特数,所以。根据上述理论,先求

再把a加上B,

再丢弃第5位比特值,得到

怎么表示有符号整数呢?

持续更新中。。。

你可能感兴趣的:(【译文】补码--理论和示例)