计算机中的减法——原码,反码和补码

计算机中的减法

首先,介绍根据位运算衍生出的三个概念:

正数负数
原码带符号位的,二进制表示的数值带符号位的,二进制表示的数值
反码同原码除了符号位之外其余位取反
补码同原码反码 + 1

补码+1是为了消除原码的“负0”(不然“路过”0的加减法会出错),因此负数的表示要加1。

计算机处理器没有加法引擎,减法是通过加法实现的。

在计算机中,两个数的减法是:

第一个数和第二个数的负数,两个数的补码相加,再求补码,以得到的结果为原码的数字就是计算结果

可能有点绕口,下面看两个例子。

计算 8 - 2 和 2 - 8(5位计算机系统)

先用二进制表示原来的数是:
8 = 01000
2 = 00010

8 的原码反码补码都是 01000(正数嘛)

2 加上符号位:10010,这是 -2 的原码
-2 原码除符号位取反是:11101,这是 -2 的反码
-2 反码再加1是:11110,这是 -2 的补码

计算过程:
以 8 - 2 为例,8 - 2 = 8 + (-2) = 8 + (16 - 2)
(这里 + 16 是:第一位为符号位,负数符号位是1,也就是 + 16,更好的解释可以参考相关书籍,先意会一下。这一步配合取补码的数学原理,可以作为下列步骤的数学证明,这里就不展开了)

		01000	是 8 的补码
+		11110	是 -2 的补码
=		00110	这一步啥也不是,hh
取补码	00110	是 6 的原码,因此 8 - 2 = 6

以 2 - 8 为例,2 - 8 = 2 + (-8) = 2 + (16 - 8)
(省略求补码的过程)

		00010	是 2 的补码
+		11000	是 -8 的补码
=		11010	啥也不是
取补码	10110	是 -6 的原码,因此 2 - 8 = -6

参考博客:

计算机中减法的实现原理

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值