关于二进制补码运算如何解决溢出问题的研究

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:longxmb
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:计算机中用补码来表示和存储数值,而在进行数值的算术运算时由于机器字长的限制往往会出现补码溢出,导致计算结果错误。针对这个问题,提出了一种根据溢出结果得到正确结果的计算方法:两个正数相加溢出时,将错误解加上2n 1即为正确解;两个负数相加溢出时,将错误解减去2n 1即为正确解,并给出了一般性证明。
  关键词:二进制;有符号数;补码;溢出;求补运算
  中图分类号:TP301 文献标识码:A 文章编号:1009-3044(2016)33-0208-02
  Abstract:Complement is used to represent and store the value in computers.But the problem of complement overflow often happens in numerical arithmetic because of the limit of word length, which leads to calculation errors. To solve this problem, a new method is proposed to get the correct result according to the overflow result,in which the error solution can turn out to be correct by plus 2n 1 when it’s two positive numbers’ additive overflow or minus 2n 1 when it’s two negative number’s additive overflow, and gives a general proof.
  Key words: Binary; Signed number ; Complement; Overflow; Complementary operation
  1 补码概述
  二进制补码是计算机中采用的数制,用来表示有符号二进制数。在二进制补码这一数制中,一切数(被加数、加数及和;被减数、减数及差;被乘数、乘数及积;被除数、除数、商及余数;求补运算前的数及求补运算后的结果等) 都是用二进制补码来表示的[1]。补码问题既是数字电子技术课程和微机原理课程的教学难点之一,也是软件开发中常常遇到的问题之一[2]。
  对于有符号数,用0表示正数的符号位,1表示负数的符号位。对于n 1(变量用斜体)位字长的有符号二进制数,其补码是这样定义的:若该数的原码为非负数,则其补码与其原码表示相同;若该数的原码为负,则其补码的数据位为其原码表示的数据位逐位求反后加1,而符号位为1[2]。其公式如下:(n表示数值位的位数)
  2 补码溢出问题
  两个用补码表示的有符号数进行加、减运算时,其特点是把符号位上表示正、负的“0”和“1”也看成数,与数值部分一起进行运算,所得的结果也为补码形式。结果的符号位为“0”,表示正数;结果的符号位为“1”,表示负数[3]。
  两个有符号数X和Y相加时,先将两数转换成补码形式,然后进行补码运算,所得结果为和的补码,即:[X Y]补=[X]补 [Y]补。两个有符号数X和Y相减时,可看成X (-Y)分别将X和-Y表示成补码形式再进行运算,所得结果为差的结果,即:[X-Y]补=[X]补 [-Y]补。
  由于补码的表示范围为:-2n~ 2n-1。当两个有符号数进行补码运算时,若结果的绝对值超出运算装置容量,数值部分就会发生溢出,占据符号位的位置,导致错误的结果[3]。
  因为计算机中的减法也看作加法,因此我们只讨论加法。下面分3种情况来讨论两个有符号数X和Y相加(转换成补码后,用n位数值位1位符号位表示)。
  1). X和Y均为正数,当X Y大于2n-1时,结果溢出。
  2). X和Y均为负数,当X Y小于-2n时,结果溢出。
  3). X和Y两数中只有一个数为正,另一个数为负。符号不同的两个数相加是不会产生溢出的[4]。
  3 如何从补码溢出结果得到正确结果
  下面将讨论两种溢出的情况,并提出解决溢出问题的方法。
  1) X和Y均为正数,当X Y大于2n-1时,结果将溢出。
  例2:使用7位数值位,1位符号位的二进制数来表示,其补码表示范围为:-128D ~ 127D
  计算70 85,由于70 85=155,155大于127,结果将溢出。
  即:70 85=-1100101= -101,显然发生溢出,结果错误。
  为了给出解决方法,先给出两个结论:
  结论一:两正数相加最高位(符号位)一定不会进位。
  证明:两正数的符号位都是零,如果符号位溢出,次高位必须要进2,在最理想的情况(两个数的次高位都是1),次高位要进2必须要求次次高位进2,以此类推,必须要求最低位进2,才能使得较高位进2,而最低位最多只能进1。
  由此例可知,即使数值位都为1,符号位也不会产生进位。
  结论二:两正数相加溢出一定是由于次高位(数值部分最高位)向符号位有进位。
  证明:根据双高位判别法(计算机中常用的溢出判别称为双高位判别法,即:最高位(符号位)有进位而次高位无进位或最高位(符号位)无进位而次高位有进位 [3]。)及结论一,可知溢出一定是因为次高位有进位,而且只能进1,所以符号位一定是1。
  下面推导出解决正数相加溢出的公式。
  设X和Y都为正数,转换成二进制补码后用n位数值位1位符号位表示,且X Y大于2n-1,即溢出。为了避免可能产生的溢出错误,有必要扩展二进制补码的码位数,即在进行求补运算之前,使二进制补码扩展符号位:将二进制补码的原符号位向左 (高位) 重复写一位,形成新的符号位。扩展符号位以后的二进制补码,真值不变。扩展符号位能够保证 n位二进制补码的每一个数求补运算的正确性[1]。结果将不会溢出。
  即:(1)用n 1位数值位1位符号位表示[X]补 [Y]补时不会溢出,得到的结果为正确结果,令正确结果为Co。
  (2)用n位数值位1位符号位表示[X]补 [Y]補时会溢出,得到的结果为错误结果,令错误结果为Er。
  在结论一和结论二的条件下,Er是将Co的最高位当成了符号位,把Er当成负数,再求补码从而得到原码。即:
  例4中-76 (-90)转换成补码运算后等于 1011010即 90。
  将90代入(5)式:90-28=-166,结果正确。
  结论四:负数的补码运算溢出时,将溢出结果减去2n 1可以得到正确结果。
  4 结论
  本文讨论了有符号数的补码溢出问题,并给出了根据溢出结果得到正确结果的方法。两个正数相加溢出时,将错误解加上2n 1即为正确解;两个负数相加溢出时,将错误解减去2n 1即为正确解。本文方法可以在不增加字长的情况下解决溢出问题。
  参考文献:
  [1] 查振亚. 关于二进制补码数制中求补运算的研究[J]. 华中理工大学学报, 1997(3):106-110.
  [2] 孙开放. 对二进制补码数的进一步研究[J]. 电气电子教学学报,2002(3):35-36.
  [3] 马春燕. 微机原理与接口技术(基于32位机)[M]. 北京:电子工业出版社,2013:14-17.
  [4] 曹建芳. 二进制定点整数补码运算中“丢失”与“溢出”问题的研究[J]. 晋东南师范专科学校学报,2003(2):68.
其他文献
【正】 列宁指出:“马克思的历史唯物主义是科学思想中的最大成果。人们过去对于历史和政治所持的极其混乱和武断的见解,为一种极其完整严密的科学理论所代替。”①在历史唯
摘要:高校计算机机房主要承担着计算机信息等相关专业很多课程的实验实践教学,各种等级考试以及社会培训考试三个方面工作。本文首先对高校计算机机房的现状进行了分析,针对计算机机房管理中经常遇到的破坏性实验教学,软件冲突和服务器不足这三大问题提出了基于VMware的解决方案。实践证明文中提出的解决方案很好地解决了破坏性实验带来的增大机房管理员管理工作量和难度,同一台计算机安装多种软件出现的软件冲突和资源不
研究型大学的本科教学应该如何建设?本文通过对国外研究型大学概念和特征的分析,结合我国研究型大学建立和发展的过程,以中国科学技术大学为例,具体分析了在研究型大学建设中
以英国、美国、日本三个发达国家最新发布的研究生学位授予数据为基础,从学位授予总体状况、增长率、学科分布、性别比例、留学生比例等角度分别分析了这三个发达国家博士、
<正> 声学造影直接应用于心脏手术尚未见有报道。1987年1月~1988年2月,我们在53例心脏手术中施行左心系统声学造影,证实此法有助于明确诊断,选择更合适的手术方式,并可在手术
该文提出了一种苯甲醛邻位定向卤代的方法:将苯甲醛与苯胺作用转化为Schiff碱,再经邻位钯化活化邻位氢,然后进行卤代,得到单一的邻位的卤代苯甲醛。
摘要:提出了一种解决作业车间调度问题的算法。使用禁忌搜索算法作为生成训练集的工具,通过对调度序列进行处理,将调度问题转化为一个分类问题,从而使用人工神经网络构建分类器。对于新的调度实例,利用训练得到的分类器得出优先级,再利用优先级得到调度序列。并在最后对调度器的实际效果使用测试实例进行了验证。  关键词:作业车间;调度算法;禁忌搜索;人工神经网络  中图分类号:TP312 文献标识码:A 文章编号
<正> 恶性胸水与结核性胸水的鉴别,在临床上经常遇到。本文观察证明,胸水细胞的染色体检查是鉴别上述两种胸水的有效方法。一、资料来源观察对象为本院1987年10月~1989年5月间