1. 引入补码的原因
在数字电路或系统中,为简化电路,常将负数用补码表示,以便将减法运算变为加法运算。
以钟表为例,时间从6点钟减少到2点钟,可以通过6-4=2逆时针转动4个小时实现;也可以通过6+8=14(表盘为12进制,满12部分舍去,所以14表示的即为2点)顺时针转动8个小时实现同样效果。所以在表盘上,-4与+8具有同样的效果。故对于-4而言,+8称为它在以12为“模”时的补数。也就是说负数(-X)的补数=模-X的绝对值|X|。所以当模为12时,-4的补码=12-4=8。
数电课本中提到二进制数的补码表示方式:
若基数为,位数为的原码,其补码为
N补=R^n-|N|
这与负数(-X)的补数=模-X的绝对值|X|是一致的。在二进制带符号运算中,求负数补码时会用到对原码取反加1的操作。以-3为例,下面将按照上述公式,用4位二进制数表示该数字的补码。
-3的绝对值为3,对应4位二进制数为0011;模为16=1111+1。所以
-3补 = (1111+1)-0011= (1111-0011)+1
其中(1111-0011)这一步就是对0011按位取反,所以-3补=|-3|按位取反加1。
2. 无符号数和有符号数表示范围
以4位二进制数为例,当表