循补码之逻辑,探背后之奥义
1.前言
2.何为补码?
3.为什么要使用补码?
4.如何使用补码?
5.补码的意义
6.小结
一·前言
补码是计算机中表示有符号整数的一种不可或缺的编码方式,很多人对补码的认识也许只止步于书本上浅层的介绍,而补码能在简化计算机运算有诸多优势并成为现代计算机中主要采用的有符号数表示方式,一定离不开补码背后不为人知的逻辑与智慧。话音至此,戛然而止,话不多说,随笔触潜入文章,一起探究补码之后的奥义与逻辑吧。
二·何为补码
补码(Two’s complement)是一种用二进制表示有号数的方法,常在计算机科学中使用,特别是用于表示负整数。补码将符号位和数值位统一处理,便于统一处理加法和减法。而补码的定义基于原码和反码。对于正数,其补码就是其本身;对于负数,其补码则是通过将该数的二进制表示取反后加1得到的。举个例子来说,一个数的补码为11111001,则原数为10000110,再取反加1得到10000111,即-7。
为了更好地理解补码的概念我们可以以钟表为例。
时钟上显示的为10点钟,而正确的时间应是5点钟,要转变为正确时间有两种方法:第一种方法是将时针往回拨5h,第二种方法是将时针往前拨7h。将其抽象为数学式,第一种方法表示为10-5=5;第二种方法表示为10+7=12+5=57,因为12是钟表上的最大数,当时间超过12点后,12自动丢失,只保留减去12以后的余数5。从结果上来看,是等价的,都表示为5点。其中12称为模,而“模”是指一个计数系统的进位基数。7是-5对模12的补数,也称为补码。该实例既说明了对模12而言,减法运算可以通过加法运算来实现,也让我们对补码更有实感。
三·为什么要使用补码?
我认为有以下两点:
(1)实现人脑思维与计算机运行的转换。
我们人脑知道原码的第一位是符号位,也可以快速计算减法,计算机却不知道这些法则,补码的出现使计算机在这方面遇到的问题迎刃而解。不仅极大程度简化了计算的运行,也提高了我们的办公效率,降低与计算机的沟通成本。
举个例子来说,在原码下,1-1=1+(-1)=0001+1001=1010=-2我们可以看出,由于符号位参与计算,对于减法来说,用原码表示计算结果并不正确。在反码下,1-1=1+(-1)=0001+1110=1111=-0我们可以看出,用反码表示计算结果问题出现在“0”这个特殊数值上,正常来说,0不应该带符号,0带符号没有任何意义。而在补码下,1-1=1+(-1)=0001+1111=0000=0我们可以看出,真值没有问题,0带符号的问题也解决了!
(2)为电路设计提供便利。
补码系统的最大优点是可以在加法或减法处理中,不需因为数字的正负而使用不同的计算方式。只要一种加法电路就可以处理各种有号数加法,而且减法可以用一个数加上另一个数的补码来表示,因此只要有加法电路及补码电路即可完成各种有号数加法及减法,在电路设计上相当方便。
四·如何使用补码?
(1)在加法和减法中的使用
在计算机的CPU运算单元中,补码被广泛用于整数的加减法运算。如计算a-b,计算机实际计算的是a+(-b),其中的补码通过对b按位取反再加1得到。例如,在8位二进制下,计算7-3,7的补码是00000111,3的补码是00000011,-3的补码是11111101,计算7+(-3)就是00000111+11111101=00000100,结果为4。这种方式让计算机可以用相同的加法电路来完成加减法,提高运算效率。
(2) 乘法和除法(部分情况):
在一些简单的整数乘法和除法算法实现中,也会涉及补码。比如,在有符号数乘法运算时,先将乘数和被乘数转换为补码形式,按照一定的乘法规则(如移位相加法)进行运算,最后根据结果的符号位和数值位得到最终的乘积。
(3) 数据存储和内存管理中的使用
(a)有符号数存储:计算机内存中存储有符号整数时,大多采用补码形式。这样可以有效利用存储空间,并且在读取数据时能够按照统一的规则进行解释。例如,在32位系统中,一个有符号整数以32位补码形式存储在内存单元中,系统可以根据其最高位判断正负,其余位确定数值大小。
(b)数据类型转换:当不同数据类型之间进行转换时,补码也发挥作用。比如,将一个短整型(如16位)有符号数转换为长整型(如32位)时,会将短整型的补码形式扩展到长整型的补码形式,保证数据的符号和数值正确。
(4)数据传输和通信中的使用
(a)网络通信:在网络协议中,当传输有符号整数数据时,补码是常用的表示方式。发送方将数据以补码形式发送,接收方按照相同的补码规则进行解码,还原出正确的有符号数。例如,在传输一个温度传感器采集的有符号整数温度值(可能为正也可能为负)时,以补码形式传输可以保证数据在不同的网络节点之间正确传递。
(b) 文件存储:在一些文件格式中,如果涉及有符号整数的存储,也会使用补码。例如,某些数据记录文件存储有符号的测量数据(如压力、位移等可能出现正负值的数据),以补码形式存储可以方便地被计算机程序读取和处理。
五·补码的意义
(1)在执行大量繁杂的数学运算及逻辑运算时,补码的使用显著提高了计算效率。
(2)在精细复杂电路设计中,极大程度简化了硬件设计。
六·小结
笔触至此,意犹未尽,的确,补码背后的逻辑与智慧远不止于此。有言“尔辈不能究物理”,尤其是计算机的初学者,“但知其一,不知其二者多矣”,更需要具备求知精神以及探索欲望,积极发问善于思考是开启探究补码背后的逻辑与智慧大门的钥匙,让我们展开对补码未知世界的探寻吧。
,积极发问善于思考是开启探究补码背后的逻辑与智慧大门的钥匙,让我们展开对补码未知世界的探寻吧。