正数的原码,补码,反码都相同,都等于它本身

负数的补码是:符号位为1,其余各位求反,末位加1

反码是:符号位为1,其余各位求反,但末位不加1

也就是说,反码末位加上1就是补码

1. 定点小数的编码方法

用定点小数引出数值的三种编码(原码、补码和反码)方法是最方便的。

(1) 原码表示法,是用机器数的最高一位代表符号,以下各位给出数值绝对值的表示方法。其定义为:

[X]原= (2.9)

例如, X=+0.1011, [X]原=01011

X=-0.1011, [X]原=11011

按定义,当X=-0.1011时,[X]原= 1-X= 1.0000-(-0.1011) =11011。这里的X为数的实际值,即相应机器数的真值,[X]原为原码表示的机器数。

原码的性质:

① 在原码表示中,机器数的最高位是符号位,0代表正号,1代表负号,以下各位是数的绝对值,即[X]原 = 符号位 + |X|。

② 在原码表示中,零有两种表示形式,即

[+0.0]原=00000, [-0.0]原=10000

设X、Y的真值分别为X=+0.0000,Y=-0.0000。则按原码定义[X]原=00000, [Y]原= 1-Y = 1+0.0000 = 10000,因此零有原码两种表示形式。

③ 原码表示方法的优点,是在数的真值和它的原码表示之间的对应关系简单,相互转换容易,用原码实现乘除运算的规则简单。缺点是用原码实现加减运算很不方便。 要比较参与加减运算两个数的符号,要比较两个数的绝对值的大小,还要确定运算结果的正确的符号等,因此在计算机中经常用后面介绍的补码实现加减运算。

在数轴上的表示:

(2) 补码表示法,是用机器数的最高一位代表符号,以下各位给出数值按2取模结果的表示方法,其定义为

[X]补=2.10)

例如:

X=+0.1011, [X]补=01011

X=-0.1011, [X]补=10101

按补码的定义,当X=-0.1011时,[X]补 = 2+X =10.0000+(-0.1011) = 10101。

补码的性质:

① 在补码表示中,机器数的最高一位是符号位,0代表正号,1代表负号。机器数和它的真值的关系,是 [X]补 = 2*符号位 + X。

② 在补码表示中,0有唯一的编码,即 [+0.0]补 = [-0.0]补 = 00000

假定X = +0.0000, Y = -0.0000,依据补码定义, 则有

[X]补 = X = 00000, [Y]补= 2+Y = 10.0000+0.0000 = 10.0000 = 00000

此处最后一步实现按2取模,处在小数点左侧第二位上的1去掉了。

③ 补码表示的两个数在进行加法运算时,可以把符号位与数值位同等处理,只要结果不超出机器能表示的数值范围,运算后的结果按2取模后,得到的新结果就是本次加法运算的结果,即机器数的符号位与数值位都是正确的补码表示,即:

[X+Y]补 = [X]补 + [Y]补 MOD 2 (2.11)

这一结论极为重要。

例如, X =+0.1010, Y = -0.0101,则:

[X]补= 01010, [Y]补= 11011,求得:

[X]补 + [Y]补 = 01010+11011 = 100101 ,按2取模后,符号位前边一位上的1去掉,则最后结果为00101,其真值为 +0.0101。符号位与数值位均正确。

又如,X1=X2=-0.1000,则[X1]补=[X2]补 =11000 那么[X+X]补=11000+11000=110000,按2取模后得10000,它的真值为-1。由此看出,用补码表示定点小数时,它能表示-1的值。

④ [X]补与其真值的关系。假定[X]补= X0X1X2…Xn,则有[X]补= 2X0+X,此关系对X为正、为零和为负都是正确的。X为正时,X0应为0,[X]补= 2*0 + X = X,X为负时,X0应为1,[X]补 = 2*1+X = 2 + X ,均与补码的定义吻合。由此又可以得到从[X]补求X的关系,即由机器数求其代表的真值的关系如下:

X = [X]补 - 2X0

= X0X1X2…Xn - 2X0

= -X0 + 0.X1X2…Xn (2.12)

当X为正数时,X0=0 真值 X = [X]补 ;

当X为负数时,X0=1 真值 X = -1 + 0.X1X2…Xn = -(1-0.X1X2…Xn)。

对补码的数值部分求补,并加上符号即得真值。

例如[X补=10110,则X的真值 = -(1-0.0110) = -0.1010。当已知补码而需求此数的真值时可采用此法,此公式在推导补码乘法的运算算法中很有用。

⑤ 补码的算术移位

将[X] 补的符号位与数值位一起右移一次并保持原符号位的值不变,可实现除法功能(除以2),即[X/2]补= X0X0X1X2…Xn-1Xn。今考虑X为正、负数两种情况。

设: X= 0.0110, [X]补=00110,右移一位得00011,是X除以2的补码结果。

设: X=-0.0110,[X]补=11010,计算 [X/2]补=11101,再按④求真值得X/2=-0.0011,说明得到的确实是X除以2的结果。

为了得到一个数的补码表示,当然可以通过补码的定义求得,但更简便的办法是:

当X≥0时,[X]补的符号位取0,数值位取X的各数值位上的值,此时有[X] 补=[X] 原。

当X<0时,[X]补的符号位取1,将X的各数值位取反(0变1,1变0)再在最低位加1,以得到 [X]补的各数值位上的值。

从[X]原求 [X] 补时,对正数或零,有[X] 补=[X]原,对负数,是符号位不变,各数值位变反后再在最低位执行加1操作。同理,由[X]补求 [X]原时,对负数仍是符号位不变,各数值位变反后再在最低位执行加1操作。

在说明补码的性质(3)时,特别强调两个数的补码相加,仅在其运算结果不超出机器能表示的数值范围时,运算结果才是正确的,否则得到的结果不正确。如 [X]补+[Y]补=01001+01010=10011。两个大于0.5的正数相加,结果的符号位变成负号,数值部分也是错误的。这是因此参加运算的两个数的和大于1,超出了机器所能表示的范围,产生了所谓的 "溢出"。对负数也会产生溢出,如[X]补+[Y]补=10101+10100=01001,两个负数相加,结果的符号位却变成正号,说明结果是错误的。

为了方便判别结果是否溢出,某些机器采用变形补码,又称模4补码表示方法,其定义为:

[X]补= (2.13)

也就是常说的双符号位的补码表示。例如:

X=+0.1011, [X]补=001011

X=-0.1011, [X]补=110101

按模4补码定义,当X=-0.1011时,[X]补= 4+X = 100.0000+(-0.1011) = 110101。从上式的结果可以看出,模4补码的表示就是在模2补码表示的符号位之前再增加与原符号同值的另一个符号位。

模4补码的性质:

① 模4补码的两个符号位相同,00表示正号,11表示负号,其数值位与其模2补码相同。当符号位为01或10时,表示数值溢出。01表示两个正数相加之和≥1的情况,通称数值 "上溢";为10时,表示两个负数相加,而其和小于-1的情况,通称数值 "下溢"。前面的1个符号位是正确的符号位。

② 在模4补码表示中,零有唯一的编码,即 [+0.0]补 = [-0.0]补= 000000。模4补码能表示-1,即为110000,与模2补码的情况非常类似。

模4补码具有模2补码的全部优点,而且更容易检查加减运算中的溢出情况。有必要指出,存储每个模4的补码数时,只要存一个符号位,因为任何一个正确的数值,其模4补码的两个符号位总是相同的。只在把两个模4补码的数送往算术与逻辑运算部件完成加减计算时,才把每个数的符号位的值同时送到算术与逻辑运算部件的两位符号位,即只在算术与逻辑运算部件中采用双符号位。

在数轴上的表示:

(3) 反码表示法,是用机器数的最高一位代表符号,数值位是对负数值各位取反的表示方法,其定义为

[X]反 = (2.14)

例如, X=+0.1011, [X]反 =01011

X=-0.1011, [X]反 =10100

正数的反码与其原码、补码相同。

反码的性质:

① 在反码表示中,机器数最高位为符号位,0代表正号,1代表负号,负数的机器数和它的真值之间的关系为:

[X]反 = ((2-2-n)+X) MOD(2-2-n)

用反码进行两数相加时,若最高位有进位,还必须把该进位值加到结果的最低位,才能得到真正的结果,这一操作通称 "循环进位"。

X= +0.1011, Y=-0.0100,有[X]反 =01011, [Y]反 =11011,

[X+Y]反 = [X]反 + [Y]反 = 01011 + 11011 = 100110,最高位有进位,要加到结果的最低位,得 00110 + 00001 = 00111,即 +0.0111。

又如, X= +0.1011, Y= +0.0100,[X+Y]反 = [X]反 + [Y]反 = 01011+00100=01111,最高位无进位值,得到的已是最终结果。

② 在反码表示中,零有两个编码,即

[+0.0]反 = 00000 , [-0.0]反 = 11111

有人也称反码为1的补码(One's Complement),它的实际模为2-2-n。这里的-n为最低位的位序号。

用反码实现算术运算不方便,0值又有两个编码,用得不很普遍。

在数轴上的表示:

2. 整数的编码方法

与定点小数的三种编码方法类似,整数也可以用原码、补码和反码三种不同的编码方法表示。区别主要表现在:

定点小数的小数点位置严格地设置在数的符号位与最高数值位之间,因此,数的表示范围和编码的取模值与用多少位二进制表示一个数无关,该位数只影响数值的精度。可以认为整数是小数点被设置在最低一位数值位的右边, 机器数的最高位仍被用作数的符号位。

数值的表示范围,以及整数编码的取模值,都与表示一个数所用的二进制位数有关。

整数三种编码的定义、特性和相互间的变换方法,均与定点小数相应的三种表示类似,只是补码的取模值为2k+1 或2k+2 (对变形补码),这里的k为二进制整数数值位的位数。例如, X=+10101 [X]原 =[X]补 =[X]反 =010101

X=-10101 [X]原 =110101

[X]补 =101011

[X]反 =101010

以上两个数的变形补码分别为0010101和1101011。这里的K均为5。

3. 浮点数常用的编码方法

前面已经说到,在计算机内,浮点数被表示为如下格式:

通常情况下,数的符号位Ms,仍然采用0表示正号、1表示负号的规则。数的尾数部分M采用定点小数形式表示,可用原码(或补码)等编码方式。讨论浮点数的编码方法的关键,是确定对阶码部分的编码方法。

在多数通用计算机中,浮点数的阶码部分多采用整数形式的移码表示。对由1位符号位和n位数值位组成的二进制形式的阶码,其移码的定义为:

[X] 移 = 2n + X -2-n ≤ X < 2n              (2.15)

将这一定义与整数补码的定义相比较,

[X]补 =(2.16 )

在数轴上的表示:

就可找出移码和补码之间的如下关系:

当 0 ≤ X < 2 n 时,[X]移= 2 n + X = 2 n + [X]补

-2 n≤ X < 0 时,[X]移= 2n + X = (2n+1 + X) - 2n

这表明,由[X]补 得到 [X]移 的方法是变 [X]补 的符号为其反码。例如:

X = +1011, [X]补 = 01011, [X]移 = 11011

X = -1011, [X]补 = 10101, [X]移 = 00101

移码的性质:

最高一位为符号位,但其取值与原码和补码都相反,1代表正号,0代表负号。

移码只用于表示浮点数的阶码,故只用于整数。

对移码一般只执行加减运算,在对两个浮点数进行乘除运算时,是尾数实现乘除运算,阶码执行加减运算。对移码执行加减运算时,需要对得到的结果加以修正,修正量为2n,即要对用移码求得的符号位取反后,得到的才是移码形式的正确结果。

在移码表示中,0有唯一的编码,即 [+0]移 = [-0]移 = 1000…0。而且浮点数机器零的形式为000…000。当浮点数的阶码≤-2 n时,不管尾数值大小如何,都属于浮点数下溢,被认为其值是0。此时,移码表示的阶码值正好是每一位都为0的形式,这有利于简化机器中的判0线路。

在计算机中,通常总是用补码完成算术的加减法运算。其规则是:

[X+Y]补= [X]补 + [Y]补 ,[X-Y]补= [X]补 - [Y]补 = [X]补 + [-Y]补

这表明,有了补码表示的被加(减)数和加(减)数,要完成计算补码表示的二数之和或二数之差,只需用二数的补码直接执行加减运算即可,符号位与数值位同等对待,一起参加运算,若运算结果不溢出,即不超出计算机所能表示的范围,则结果的符号位和数值位同时为正确值。此外,还可以看到,实现减运算时,用的仍是加法器线路,把减数的负数的补码送加法器即可。在有了一个数的补码之后,求这个数的负数的补码,是简单地把这个数的补码逐位取反再在最低位加1即可得到。例如,[Y]补=101101,则[-Y]补=010011,这大大简化了加减运算所用的线路和加减运算的实现算法。

下面的问题是如何检查加减运算中的溢出问题。通常有三种表述方式(说法):

(1) 两个符号相同的补码数相加,如果和的符号与加数的符号相反,或两个符号相反的补码数相减,差的符号与减数的符号相同,都属于运算结果溢出。这种判别方法比较复杂,要区别加还是减两种不同运算情况,还要检查结果的符号与其中一个操作数的符号的同异,故很少使用;

(2) 两个补码数相加减时,若最高数值位向符号位送的进位值与符号位送向更高位的进位值不相同,也是运算结果溢出。

(3) 在采用双符号位(如定点小数的模4补码)运算时,若两个符号位的得值不同(01或10)则是溢出。01表明两个正数相加,结果大于机器所能表示的最大正数,称为"上溢";10表明两个负数相加,结果小于机器所能表示的最小负数,称为"下溢";双符号位的高位符号位,不管结果溢出否,均是运算结果正确的符号位,这个结论在乘法运算过程中是很有实际意义的。请注意,在采用双符号位的方案中,在寄存器和内存储器存储数据时,只需存一位符号,双符号位仅用在加法器线路部分。

再次强调,这三种不同说法是对同一个事实的略有区别的表述,实现时用到的线路可以有所区别,但问题的实质是完全一样的。请看 [X]补 + [Y]补 的运算情况:

01011        10101       10100

+ 01000       + 11000      + 11001

10011       101101      101101

(1)       (2)       (3)

10111       001011      110111

+ 10101      + 001000     + 110101

101000       010011      1101100

(4)       (5)       (6)

这全都是溢出情况,前4个使用一个符号位,后2个使用二个符号位。用前面说的任何一种表述解释这里的溢出都是可以的。例如,对于(1),从正加正的得负,或数据位向符号位送的进位值为1,而符号位送向更高位的进位值却为0,二者不相同,或在(5)中使用双符号位方案时,其双符号位结果为01,都是运算结果溢出。

凡补码加减运算其结果不属于上述情况的,均不是溢出,结果的符号位和数值位均正确。这里虽然讨论的都是加法运算,对减运算亦适用。正减负等同正加正,正减正等同正加负,正如前面说过的,减运算也是用加法器完成的。例如:

01011      11101      001011     111101

+ 00100     + 11010     + 000100    + 111010

01111      10111      001111     110111

(1)      (2)       (3)      (4)

(1)、(2)使用一位符号位,(3)、(4)使用二位符号位,符号位送向更高位的进位值,不论其值为0或为1一律在取模后丢弃。

有了上述说明,就可以用图2.5的逻辑线路完成二补码数的加减运算。

运算前,X、Y寄存器分别存储被加(减)数 和 加(减)数,计算结果存回X寄存器;F为加法器,能在命令X→F和Y→F信号的控制下接收两个寄存器中的数据并完成加法运算,运算结果在F→X命令信号的控制下接收回X寄存器中

◆◆

评论读取中....

请登录后再发表评论!

◆◆

修改失败,请稍后尝试

如何用计算机二进制进行计算,计算机如何实现二进制数据运算相关推荐

  1. 计算机word表格计算教程F9,Word表格数据计算与域操作

    摘 要:Word是常用的文档编辑软件,用户在平时的工作中,利用它可以进行文字.图片.表格的排版处理等工作,但往往忽略WORD也具有强大的计算功能:Word的表格计算功能在表格项的定义方式.公式的定义方 ...

  2. 计算机应用领域的CIMS,计算机的应用领域

    计算机的应用领域 近年来,计算机技术得到了飞跃发展,超级并行计算机技术.高速网络技术.多媒体技术.人工智能技术等相互渗透,改变了人们使用计算机的方式,从而使计算机几乎渗透到人类生产和生活的各个领域,对 ...

  3. 计算机有哪些应用领域,计算机的应用领域有哪些

    计算机的应用领域有哪些 计算机的应用领域已渗透到社会的各行各业,正在改变着传统的工作.学习和生活方式,推动着社会的发展.计算机的主要应用领域如下: 1.科学计算(或数值计算) 科学计算是指利用计算机来 ...

  4. 计算机的应用领域知识,计算机主要应用于哪个领域?

    计算机的应用领域已渗透到社会的各行各业,正在改变着传统的工作.学习和生活方式,推动着社会的发展.计算机的主要应用领域如下:1.科学计算(或数值计算) 科学计算是指利用计算机来完成科学研究和工程技术中提 ...

  5. cfa的pv怎么用计算机算,CFA考点解析:如何用计算器Amort键计算interest rate

    CFA考点解析:如何用计算器Amort键计算interest rate 首先用计算时间价值的第三排的五个键计算债券.然后按"2nd"键,和"PV"键,也就是调用 ...

  6. 金融计算机的amort,CFA考点解析:如何用计算器Amort键计算interest rate

    全球最大的CFA(特许金融分析师)培训中心 CFA考点解析:如何用计算器Amort键计算interest rate 首先用计算时间价值的第三排的五个键计算债券.然后按"2nd"键, ...

  7. 现代计算机三大科学计算,计算机的三大特点是什么?

    计算机的三大主要特点 1.运算速度快:计算机内部电路组成,可以高速准确地完成各种算术运算.当今计算机系统的运算速度已达到每秒万亿次,微机也可达每秒亿次以上,使大量复杂的科学计算问题得以解决.例如:卫星 ...

  8. 1.计算机发展阶段 计算机发展历史 机械式计算机 机电式计算机 电子计算机 逻辑电路与计算机 二极管 电子管 晶体管 硅 门电路 计算机 电磁学计算机二进制...

    引言 任何事物的创造发明都来源于需求和欲望 而科学技术的发展则推动实现了目标 正是因为人类对于计算能力孜孜不倦的追求,才创造了如今规模的计算机. 计算机,字如其名,用于计算的机器.这就是最初计算机的发 ...

  9. 最早采用二进制的计算机,计算机 | 中国古代人最早提出的二进制思想?

    原标题:计算机 | 中国古代人最早提出的二进制思想? 二进制与计算机事物的多少或者顺序,我们可以用一种称为"数"的符号来表示.事物的数量是无穷的,我们却不可能创造无数个符号.为了解 ...

最新文章

  1. 2012年12月4期手机网页开发
  2. android数据存储方式(三)----Files
  3. 实例化Layout中的布局文件(xml)
  4. 【数学与算法】二部图、匈牙利匹配、稳定婚配
  5. spring MVC(2)--注解Hello World
  6. SHT知识库操作要点
  7. Android无线调试——抛开USB数据线
  8. c语言冒泡结构入门程序,C语言入门:冒泡排序
  9. C语言之设计模式——单例模式
  10. 数据类型的小小研究:Access与SQL Server的数据类型
  11. AD格式生产文件Gerber文件的制作
  12. python中将字符变为大写_python3.4.3将汉字转换为大写拼音首字母
  13. flink-sql所有语法详解-1.13
  14. 电脑开机没反应怎么办?
  15. UnityShader笔记第三课-MVP矩阵原理-M矩阵
  16. 浏览器开代理后,https地址打不开
  17. 关于APP抓包,Mac就不配拥有姓名吗?
  18. 10100java压力测试_3DMark新增压力测试 你的电脑可靠?得先过这关
  19. UE5笔记【六】流明引擎Lumen简介;Lumen处理发光物体。
  20. Linux 内核编译

热门文章

  1. 请求成功但是报错: Uncaught (in promise)
  2. 计算机应用提高篇课后答案,计算机应用技能技巧
  3. 哈登独得40分保罗复出 火箭主场103:98复仇魔术
  4. 优化ESD防护的PCB设计准则
  5. 安卓libc setenv函数内存泄漏
  6. 辽宁大学广播影视学院电影专硕考研上岸经验分享
  7. ZigBee串口通信
  8. 【树莓派】登入树莓派
  9. burnintest激活_PassMark BurnInTest Pro v9.0.1006(拷机软件)真正注册版
  10. 【HTML------樱花雨】