计算机基础-----数据的表示

举报
加油O幸福 发表于 2021/09/27 14:00:51 2021/09/27
【摘要】 数据的表示主要涉及到数制转换、数据编码、浮点数计算三个方面的内容。1. 数制转换(1)R进制数转换成十进制数R进制数转换成十进制数通常使用按权展开法。具体操作方式为:将R进制数的每一位数值用Rk形式表示,即幂的底数是R,指数为k,k与该位和小数点之间的距离有关。当该位位于小数点左边, k值是该位和小数点之间数码的个数,而当该位位于小数点右边,k值是负值,其绝对值是该位和小数点之间数码的个数加...
数据的表示主要涉及到数制转换、数据编码、浮点数计算三个方面的内容。
1. 数制转换
(1)R进制数转换成十进制数
R进制数转换成十进制数通常使用按权展开法。具体操作方式为:将R进制数的每一位数值用Rk形式表示,即幂的底数是R,指数为k,k与该位和小数点之间的距离有关。当该位位于小数点左边, k值是该位和小数点之间数码的个数,而当该位位于小数点右边,k值是负值,其绝对值是该位和小数点之间数码的个数加1。
例如二进制数l0101.01的值可计算如下:
l0101.01=1×24+1×22+1×20+1×
按照上面的表示法,即可计算出R进制数十进制的值。
(2)十进制数转换为R进制数
最常用的是“除以R取余法”。例如将十进制数85转换为二进制数:
2|85余1
2|420
2|21 1
2|100
2|5 1
2|2 0
1 1
将所得的余数从低位到高位排列(1010101)2就是85的二进制数。
(3)二进制数与八进制数、十六进制数之间的转换
二进制转八进制:将每3个二进制数转换为八进制数;
二进制转十六进制数:将每4个二进制数转换为八进制数;
八进制转二进制:将每个八进制数转换为3位二进制数;
十六进制转二进制:将每个十六进制数转换为4位二进制数。
上面的转换都是以小数点作为计算数码个数的起点。八进制数和十六进制数转换可先转换为二 进制数,然后再转换为目标进制。
2. 原码、反码、补码、移码
在计算机中,数据编码方式可以有多种,最为常见的有原码、反码、补码、移码。一个正数的原码、补码、反码是相同的,负数则不同。
(1)原码
将最高位用做符号位(0表示正数,1表示负数),其余各位代表数值本身的绝对值的表示形 式。这种方式是最容易理解的。
例如,+1的原码是00000001,–1的原码是10000001。
但是直接使用原码在计算时却会有麻烦,比如(1)10+(–1)10=0,如果直接使用原码则:
(00000001)2+(10000001)2=(10000010)2
这样计算的结果是–2,也就是说,使用原码直接参与计算可能会出现错误的结果。所以,原码的符号位不能直接参与计算,必须和其它位分开,这样会增加硬件的开销和复杂性。(2)反码
正数的反码与原码相同。负数的反码符号位为1,其余各位为该数绝对值的原码按位取反。这个取反的过程使得这种编码称为“反码”。
例如,–1的反码:11111110。
同样对上面的加法,使用反码的结果是:
(00000001)2+(11111110)2=(11111111)2
这样的结果是负0,而在人们普遍的观念中,0是不分正负的。反码的符号位可以直接参与计算,而且减法也可以转换为加法计算。
(3)补码
正数的补码与原码相同。负数的补码是该数的反码加1,这个加1就是“补”。
例如,–1的补码:11111110+1=11111111。
再次做加法是这样的:
(00000001)2+(11111111)2=(00000000)2
直接使用补码进行计算的结果是正确的。
对一个补码表示的数,要计算其原码,只要对它再次求补,可得该数的原码。
由于补码能使符号位与有效值部分一起参加运算,从而简化运算规则,同时它也使减法运算转换为加法运算,进一步简化计算机中运算器的电路,这使得在大部分计算机系统中,数据都使用补码表示。
(3)移码
移码是对补码的符号位取反得到的一种编码。移码只用于表示浮点数的阶码,所以只用于整
数。
例如,-1的移码为:01111111。
3. 浮点数计算
在数学中,要表示一个很大的数时,我们常常使用一种称为科学计数法的方式:
N=M*Re
其中M称为尾数,e是指数,R为基数。
浮点数就是使用这种方法来表示大范围的数,其中指数一般是2,8,16。而且对于特定机器而言,指数是固定不变的,所以在浮点数中指数并不出现。从这个表达式可以看出:浮点数表示的精读取决于尾数的宽度,范围取决于基数的大小和指数的宽度。浮点数的运算主要有三个步骤:对阶、尾数计数、结果格式化。
(1)对阶
首先计算两个数的指数差,把指数小的向指数大的对齐,并将尾数右移指数差的位数,这样两个浮点数就完成了对阶的操作。可以看出,对阶的过程可能使得指数小的浮点数失去一些有效位。
如果两个浮点数阶数相差很大,大于指数小的浮点数的尾数宽度,那么对阶后那个浮点数的尾数就变成了0,即当做机器零处理了。
(2)尾数计算
对阶完成后,两个浮点数尾数就如同定点数,计算过程同定点数计算。
(3)结果格式化
尾数计算后,可能会产生溢出,此时将尾数右移,同时指数加1,如果指数加1后发生了溢出则表示两个浮点数的运算发生了溢出。
如果尾数计算没有溢出,则尾数不断左移,同时指数减1,直到尾数为格式化数。如果这个过程 中,指数小于机器能表达的最小数,则将结果置“机器零”,这种情况称为下溢。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。