补码解析

【转】补码原理(二进制正负数加减法基础)
2010-03-29 15:42

补码原理(二进制正负数加减法基础)

序言:在计算机里,为了区别正负数,采用第一位表示符号(正或负),这样一来,在计算机的二进制里做加法没问题,但既有加法又有减法时问题就来了:如做1 - 1 =0 时

(0 001) + (1 001) = (1 010) = ( -2 ) 显然不正确(原因是第一位是用来表示正或负号)。

为了解决这个问题,人们想出了补码的概念,亦即补码的设计目的是:

⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.

⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计

以下介绍我对于补码的一些理解。


十进制中减一等于加上负一,我们知道时钟(时钟为十二进制)里“十点”减“三点”等于“七点”,而我们也知道“十点”加上“九点”也等于“七点”。利用这个原理,我们称在时钟的十二进制中,“三点”的补码为“九点”(因为减三和加九等价,不记天数的增加)。


四位二进制里(以四位为例比较简单介绍),我们知道“0001”加上“1111”等于“10000”,但“10000”超过了四位,故称其为溢出,并把最高位“1”舍去。举例子:如果“0010”减“0001”,则等于“0001”,而我们也知道“0010”加“1111”也等于“0001”,这样我们就在二进制里实现减法向加法的转换。而二进制里的第一位是符号位(0表示正数,1表示负数),故数值即如表中“二”和“五”所示。通过上面补码的一些规则我们知道减一(或加负一)等于加上一的补码,这就需要寻找“五”(负数列)与“六”产生一一对应关系的规则才能找出有符号位的二进制减法向加法的转换规则,根据观察上表(或者说是试探吧)可知“五”和“六”的第一位都是一,只是后面三位有所不同,所以在保持第一位都是一的前提下对“五”的后三位进行“特殊”处理(按位取反然后再在末位加一,如“001”取反变成“110”,再加一变成“111”)即得到“六”的后三位,这就是“五”和“六”的一 一对应关系规则。


综合二进制正数和负数的这些规律我们得出下面这个二进制数的加减法均化为加法计算的规律(也称补码运算):正数的补码为其本身(因其可以直接加),负数的补码为符号位保持“一”不变,后面的位取反然后再加一(即上面所说的“特殊”处理),作加减法时的公式为


“补码”+“补码”=“得数的补码”


,如4+(-3)=1的二进制计算是“0100”(4原码为“0100”)+“1101”(-3原码为“1011”)=“0001”(0001的补码就是它本身,因0001是正数)。对于更多位的二进制运算也适用与此规律。取反加一是因为两个四位二进制数相加等于“10000”时(即互为补数),已知其中一个数求其补码:其中一个数就等于“10000”减去另外一个数,由于机器的原因限制了位长只能为四位,故采用“10000”先减去一变成“1111”,再减去其中一个数,这样的话在直观上看来就是被减的数“取反”(即0变1,1变0);因为之前减去了一,所以减了之后再加回一,这样实现了“补数”之间的转换,这就是取反加一的原因。


特别地,0的二进制表示是“0000”,其补码也就是它本身;- 8的二进制表示是“1000”,其补码也是它本身,这是因为- 8(“1000”)的后三位取反后是“111”,再加一是“1000”,因为这是后三位,且- 8的符号位不能变,所以- 8的后三位加一后(即“1000”)的最高位 “一”溢出舍去,故- 8的补码还是它本身。以上就是二进制正负数的加减法的补码原理解析。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值