首页 > 范文大全 > 正文

微机系统中补码的原理及意义

开篇:润墨网以专业的文秘视角,为您筛选了一篇微机系统中补码的原理及意义范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要 补码在二进制的学习中,常常与原码、反码一起出现,对于原码和反码我们理解基本上没问题,但对于补码的学感觉心里面有一些“结”,笔者通过对补码的学习和理解,总结一些心得和体会,希望给大家,特别是初学者学习补码有一定的启发和帮助。

关键词 补码;原码;反码;加法器

中图分类号:TP301 文献标识码:A 文章编号:1671-7597(2014)17-0181-01

1 补码的意义

现实生活中,我们有加法、减法、乘法和除法,但在计算机中只有一个加法器。换句话说,加法运算在计算机中可以直接完成,减法、乘法和除法运算最终也得转换为加法才能实现,说到这里,可以有些初学者会想,为什么计算机中不设计一个类似于“加法器”的“减法器”或者“乘法器”的部件,主要原因是在生活中看似一些很简单的东西要用电路来实现都很复杂、很困难的,再说如果用一个加法器可以实现其他运算,其他的“加法器”、“减法器”或者“乘法器”也就没有必要了,这样还能使电路的设计更简单。好了,现在我简要地说一下补码在计算机中的意义,计算机不能直接做减法,必须把相应的减法变成加法,才能进行计算。然而我们发现,一个数减去另外一个数,与一个数加上“另外一个数的补码”结果是一样的。这就是补码对于计算机的意义:将减法运算变成了加法运算。

2 减法变加法的原理

减去一个数,我们只要加上这个数的补码就行了,这样减法也就变成了加法。这样做的原理到底是什么?我们从生活中时钟、圆周、两位数的运算现象来探讨一下。

1)时钟现象:这里说的时钟,以我们生活中12小时制的指针式机械表来讨论。假如目前时针处于3点钟的位置,顺时钟走1个小时表示为(3+1)=4;而逆时钟走11个小时表示为(3-11)=4,我们发现两个运算结果对于12小时的时钟来说,结果是一样的,指针指在同一个位置。用其他的数进行同样的运算,现象和结果都一样,那么这些数有什么特点?不难看出1+11=12、2+10=12、3+9=12……,在这其中,12这个数现得很关键,因为我们的手表本来就只有12个格(小时),时钟再怎么转动,它表示的范围也就在12个小时之类,多余的都丢失了。

2)圆周现象:我们学小学数学的时候就知道了,一个圆周是360度,在画圆周的时候我们细心点会发现以某点为圆心开始画圆,顺时针画90度跟逆时针画270度落脚点是同一个点,或者说+90跟-270在画圆周的时候效果是一样的。同样我们会发现+30和-330、+60和-300、+180和-180有同样的现象。跟时钟现象对比,我们会发现同样的规律30+330=360、60+300=360、180+180=360,360这个数同样很关键。

3)两位数容量运算器:假如的一个加减运算器中,有且只有两位数,当两位数相减结果在(0~99)这个范围之类的时候,我们会发现以下现象,60-10=50和60+90=50、60-20=30和60+80=40、60-30=30和60+70=30……等等,10+90=100、20+80=100、30+70=100,100这个数对于两位容量的运算器来说,显得很关键。

4)模的规律:在时钟现象中的数字12、圆周现象中的360度、两位数容量运算器中的数字100,对于减法变加法运算特别关键,我们把这3个数字分别叫做这三个现象中的“模”。“模”的英文也叫“MOD”,即“取余”的意思,也就是说在运算过程中,当结果超过(溢出)这个数时,得到的是去掉“模”以后的尾数。

3 一个负数的补数(补码)的求法

对于补数这个概念,我先暂且这么叫吧,当把它转换成二进制代码的时候,我们就给他也换个名字。

1)模减去相应数的绝对值。要求解一个负数的补码,如能知道这种数的“模”,再用模减去这个数的绝对值,得到的就是这个负数的补码,如模为12的时钟,-1的补码是11、-2补码是10、-3的补码是9……,在8位(一个字节)的二进制数中,根据二进制的特点,它的模为二的八次方(256),-1的补码是255,-2补码是254、-3补码是253,这种求解方法非常的直观,换种说法就是一个负数绝对值加上他的码在值上正等于模的数值。这里顺便提一下正数的补码,在转换运算的过程中,正数用加法器可以直接进行加运算算,所以正数的补码没有意义,大小是它本身。

2)二进制中取反加1。在二进制中,求一个负数的补码是将符号位之外按位取反,再加1,得到的就是相应数的补码。

4 补码与原码、反码的关系

首先要说明的,如果计算机中没有补码这个概念,反码和原码也就没有存在的意义了。如果说为了找到生活中带“-”符号的负数与补码的关系,产生了所谓的原码和反码概念,也许更能合理解释原码和反码存在的意义。

1)二进制的意义:在微机系统中为什么会用二进制,而不采用其他进制?大家都知道在所有的电子通信设备里面,所有的信息处理与自动控制都是通过“电”或者“电信号”来处理,这就意为着处理我们生活中的数据时,也必须将这些数据转换为相应的“电压”或者“电信号”来处理。在二进制中,只有两个计数符号,只要用两种不同的电压信号就可以表示。一种电压状态用来表示数据“0”,称之为“低电平”,另外一种电压状态用来表示数据“1”,称之为“高电平”。由于两种电平之间的电压差值一般比较大,准许的范围也比较宽,所以这种方式搞干扰性也强,如果采用“八进制”,意为着必须用8种相应的电压状态来对应,一个是难以实现,再一个每种电压之间的范围也小,搞干扰性自然也就差。

2)原码:生活中的数,我们用“+”号来表示正数、用“-”号来表示负数,但在计算机中,我们是用“1”和“0”两个数据来表示一切数字,包括“+”和“-”两个符号,这个时候就自然而然就想到用0和1两个数字来表示加减号。用“1”来表示“-”、“0”来表示“+”,数值大小部分用二进制来表示,得到的这个代码,我们把它称为原码,原码是一串“0”和“1”表示的数字代码,顺利解决了正负数的二进制表示问题。原码不存在学习上的懂与不懂的问题,只要你会进行二进制与其他进制转换,就可以写出任何一个数的原码。

3)反码:为了找到原码与补码之间的关系,发现一个负数的补码是原码取反加1的结果,那么原码转换下补码的过程中,产生了一种新的代码叫反码,它起介于原码与补码之间。

5 小结

当然,还有其他的一些说法,如补码解决了符号位能与有效值一起参加运算、解决了0二进制编码的唯一性问题,但是补码主要的作用是解决了转减法运算为加法运算的技术性难性。

参考文献

[1]李明慧.计算机组成原理[M].北京:中央广播电视大学出版社,1997.

[2]陈光东.单片机微型计算机原理与接口技术(第二版)[M].武汉:华中理工大学出版社,1999.