关于补码 (填坑大一)

计算机处理数据的过程有时候我们难以理解或者想通,到底补码是什么,竖式相减什么时候能用,符号位的0和1能不能参与运算,这些本来是大一的知识,今天做一下整理:

首先,我们先梳理一下人是怎么进行计算的:

  • 对于8-6,人们知道等于2,这是基于十进制的运算,大数减小数,不够减高位借10
  • 但是对于6-8,得到-2,我们的逻辑是用8-6,再取相反数。

所以对于机器而言,处理两个数的运算,完全可以先判断大小,如果A>B,直接相减,如果A<B,算B-A,而后加符号即可。

但是在机器的实现过程中会面临一些问题,首先,二进制,其次,负号的表示以及在运算中应该如何处理这个符号。我们先来看看:

  • 对于大数减小数,二进制无非是高位借2,不影响。计算机将8转化为二进制1000B,6转化为0110B,然后1000-0110列竖式也能直接得到0010B,所以大数减小数没有问题。
  • 在讨论小数减大数的情况之前,我们先介绍计算机中如何处理负号这个符号,牺牲一半的取值范围,用数字的最高位表示正负。但是,问题是,这个符号怎么参与运算,一旦加入了这个符号,我们便不能将两个数字直接加减了,因为最高位不是最高位了,而只是一个标识。比如:3+(-1),引入负号后,取四位运算A=0011,B=1001,直接列竖式加得1100,也就是-4,这不合逻辑。所以说我们引进模值机制,假设机器中四位数字溢出后会截断,所以我们3+(-1)也就是3的值减少1,不妨加上15,也就是得到3+15-16=2,我们习惯的十进制逻辑中是满足的,那么二级制中呢,0011+1111=(1)0010,最高位的1被截断,得到正确结果。也就是说,单纯的将十进制数字转化为二进制,再添加负号是没有任何任何意义的,我们在计算机中将-1存储为15,或者说 2n-1,这个数字的二进制码,我们称为-1的补码,也就是说在计算机中,正数我们原样使用,负数A我们取2n-A进行存储和运算
  • 再讨论回小数减大数的问题,现实中我们可以通过数字的比较,而后用B-A,再加入负号,而计算机中,我们已经知道-B是多少的值了,直接用A+(-B)即可实现A-B。
  • 当然,还要说一种情况,就是溢出,如果我们限制十进制数的三位,那么999+1=000,这就是溢出,同理,在计算机中的溢出也是正数加正数,负数减负数的时候,超过那个阈值回截断,从而得到错误结果。

经过以上分析,我们知道了计算机处理数据的方法。其中有原码,补码,溢出的概念。这是大一计算机导论中留下的坑,如今填上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值