您的位置:首页 > 理论基础

考研二战日记-第17天——计算机组成原理:数据表示

2020-06-24 04:27 441 查看

计算机的所有数据均为二进制存储,研究二进制数的表示方法就尤为重要,在计算机中二进制数的表示方法一般有原码、反码、补码三种。

二进制整数的表示

  • 原码

原码是最简单,最基础的一种保存方式,无符号整数的原码表示法就是简单地将一个数转换为二进制,然后保存在内存中;整数的数值部分的转换与无符号整数的转换方法一样,但整数的最高位表示的是该数的符号,一般0表示正,1表示负。

  11010
无符号整数 26
整数 -10

 

由上述规则就可以推测出无符号整数和整数的原码表示范围。

假设一个数据由一个字节(8位)来保存

  可表示的范围
无符号整数 0~255
整数 -127~127

反码
反码就是原码除符号位之外的数按位取反,若是无符号数就全部位取反。反码常常作为数据运算的中间码,计算机一般不会直接储存反码。
比如:无符号整数11010的反码为00101
整数11010的反码为10101


补码
补码是计算机中最广泛的保存方式,在介绍补码之前先介绍“模”,“模”表示一个计量系统的计量范围,比如一个十进制数可表示0~ 9这十个数,那么十进制数的模就是10,计算机也是一个计量系统,假设计算机用一个字节来表示一个无符号整数,那么可表示的范围就是00000000~ 11111111,模就是256。我们想象一个十进制的钟表,现在指针指向6,我想把指针指向2有两种方法,一种是往回拨4,即6-4=2,一种是往后拨6,即(6+6)%10=2,在这个钟表系统中,6-4=6+6,我们就说-4的补码为6,从这个例子中可以看出,补码使一个减法运算变成了加法运算,事实上,补码就是专门为减法运算而产生的。

  • 在二进制中补码有更简单的转换方法,表示如下

  补码
正数 与原码相同
负数 除符号位外按位取反后加一

 

 

比如11010的补码就是10110
01010的补码就是01010
而补码的好处不仅只是把减法变成了加法,在使用原码的时候有一个棘手的问题,0该如何表示?事实上,在原码中存在两个0,+0:00000000和-0:10000000,而在补码中就没有这种困扰,按照补码的规则10000000的补码表示就是00000000,与+0一样,所以在补码中只有一个0,但是补码中确实有10000000这个数,在上面原码的介绍中我们知道8位可表示的范围是-127~127,而由于补码中多了一个10000000,人们规定就用它来表示-128,所以假如计算机用一个字节来表示数据,那么

二进制实数的表示

定点数

当数据有小数位时,计算机会约定前几位为整数部分,后几位为小数部分,也就是说小数点不移动,这就是定点数(整数也是定点数),定点数的原码,反码和补码的转换规则和整数类似。

浮点数
通过学习定点数,我们很容易就发现,由于小数点固定,数据的表示就给计算机带来很大的限制,由此,浮点数成为计算机通常保存实数的方式。
我们先来回忆一下小学时学过的科学计数法,比如说450000就可以表示成4.5×105的形式,浮点数的表示原理与此是一样的,比如1010010.1100就可以表示成0.10100101100×27(注意小数点所在的位置),而其中的“7”我们就称之为阶码,浮点数表示方法如下:

假设符号占1位,阶码符号占1位,阶码占4位,尾数占11位,于是,1010010.1100就可以表示成00|0111|10100101100
浮点数的原码,反码和补码的转换规则和整数类似。
规格化
我们再看一个例子,将1010010.1100表示成浮点数,有两种结果,00|0111|10100101100和00|1001|00101001011,很容易察觉出来第一种方式更好,因为它保留了更多的有效位,更加节约内存,我们把这种将有效数字尽量占满尾数数位的方式称为规格化,即真值的尾数部分的最高位为非0数。当有效位在小数点前面时(计算时常有这种结果),就进行“右规”,尾数每右移一位,阶码就加以,“左规”则与之相反。
规格化还使浮点数只有一种表示方式,让浮点数更加规范。
注意:若浮点数是以补码表示,则规格化的标志是尾数最高位和符号位不同。其中的证明可由读者自行思考
移码
移码的定义是:在真值上加上一个常数,这个常数叫偏置值。通常取2n,这个n是数据位,即机器字长去掉一个符号位。我们注意到,2n就是计算机这个计量系统的“模”,事实上,在二进制的转换上,移码就是补码的符号位取反。
还记得上面的十进制钟表吗?-4的补码是6,而-4+10=6,而由于移码中最高位不再表示符号,所以可表示的整数将会更大,16=6+10,可知16就是6的移码。在二进制上也是这个道理。
由此可以感觉到,移码应该是和补码有着相似的性质。
由移码的转换规则可知,移码和补码一样,只有一个0,即10000000,而移码全0时,对应的真值最小值−2n。移码全1时,对应真值的最大值2n−1。
移码也有补码不可比拟的优点,它可以更直观的显示出数的大小,而不必再去纠结符号,对于计算机的运算更加方便。
IEEE754标准
IEEE754的是电气和电子工程师协会(IEEE)所指定的二进制浮点数算术标准,是目前使用最广泛的二进制浮点数标准,由于本文是为机械数加减法做准备,故不再详细介绍此标准。关于此标准请参考IEEE754标准——百度百科。
注意:IEEE754中尾数前默认省略最高位1。IEEE的那些工程师们真是为了省点内存而想尽办法=-=

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: