【运算器】
一般简单CPU实现的运算操作有算术运算、逻辑运算和移位。算术运算主要包括加法、减法、曾1、减1等,逻辑运算主要包括与、或、非、异或,移位实现左移右移或者不变。
算术运算器实际上就是一个加法器,那么减法怎么办呢?
众所周知,A-B=A+(-B),就这样,减法就转换成了加法,那么负数怎么表示?答案是用补码!
实际上为了方便,我们把参与运算的数都用补码表示,定义正数和零的补码为本身,负数的补码为其反码加一(反码就是按位取反)。
补码表示的时候,正数、零和负数可以很方便区分出来,最高位为0,则为正数或零,最高位为1,则为负数。
不过在这里,我们还需要对运算结果按2^n取模(n为位数),写成通式就是这样:
[A-B]补=([A]补+[-B]补)mod 2^n,(A、B>=0)
其实mod 2^(n+1)的意思就是舍弃最高位的进位。
举个例子,如果要计算八位二进制运算5-3,可以这样做:
[5]补=5=00000101B,
[-3]补=[3]反+1=[0000011]反+1=11111100B+1=11111101B
然后做加法运算

如果第一个是负数呢?情况也一样的,因为加法满足交换律,加法器的两个输入端也是对称的。
如果小数减大数呢?例如15-35(八位字长):
[15-35]补=([15]补+[-35]补)mod 2^8=(00001111B+11011101B)mod 2^8=11101100B=[-20]补
由此可以看出,当用补码表示整数的时候,加减法可以统一为加法运算。