计算机存储格式详解

计算机存储格式详解

定点数表示法

定点数不是整数,它代表小数点固定在某一位都可以,但是通常将数据表示成纯小数或者纯整数。

对于定点数,一般用n+1个位存一个定点数n,其中多出的一位为正负符号位,一般放在最左边,小数点要么放在最左边是小数,要么放在右边是整数,自动忽略掉。

对于小数来说,它的表示范围为0<=|x|<=1-2^(-n), 为什么是1-2^(-n)呢?我们设除了标志位所有位为1,那么它表示的就是2^(-1)+2^(-2)+...+2^(-n),如果标志位也为1呢?就是-(2^(-1)+2^(-2)+...+2^(-n)),取绝对值还是2^(-1)+2^(-2)+...+2^(-n),也就是说,它等于1-2^(-n)。

如果是纯整数,那么表示的范围为0<=|x|<=2^n-1,为什么是2^n-1呢?2^(n-1)+2^(n-2)+...+2^0=2^n-1。

目前计算机中多采用定点纯整数表示,因此将定点数表示的运算简称为整数运算。也就是说,定点数现在完完全全表示纯整数了,不用考虑别的了。

浮点数表示法

我们通常这样表示浮点数:

N=10^E.M N=2^e.M

其中,M是尾数,所谓尾数,就是一个定点小数,e是比例因子的指数,称为浮点数的指数,常称为阶码,用来指明小数点在数据中的位置,决定了浮点数的表示范围,比例因子的基数2对二进计数制的机器是一个常数。

按照IEEE754标准,在32位浮点数中:

  • 31-30 符号S
  • 30-23 阶码E,占用8位,阶符采用隐含方式,采用移码的方法来表示正负指数。那什么是移码呢?移码(又叫增码)是符号位取反的补码,一般用指数的移码减去1来做浮点数的阶码,引入的目的是为了保证浮点数的机器零为全0。这又是什么意思呢?因为阶码是一个整数,它也可以是一个负数,那么当阶码无限小,产生下溢的时候,阶码变成0,要知道,如果采用补码的话(整数一般存为补码),当它无限小时,它就会变成0(实际上是-0),那么这个浮点数的值就会变成1,这个很好理解。而此时这个数是无限接近于0的。移码不必补码简单,详细见这里 百度百科 移码
  • 22-0 尾数M,为了提高数据的表示精度,当尾数的值不为0时,尾数域最高有效位应为1,这称为浮点数的规格化表示。由于规格化的浮点数的尾数域最左位(最高有效位)总是1(这里是二进制,因为基数是用2的),故这一位经常不予存储,而认为隐藏在小数点的左边,于是可以用23位bit存储24位有效数。

一个规格化的浮点数x的真值表示为:
x = (-1)^S*(1.M)*2^(E-127)

之所以要减127,是因为指数偏移为8位,然后是移码的问题需要修正,所以要减。

64位的浮点数中符号位1位,阶码域11位,尾数域52位,指数偏移值1023。

根据IEEE754,浮点数还可以表示正负无穷和NaN,这体现在指数取最后一个数,32位指数取255,64位指数取2047,就能达到上述效果。

十进制数串表示法

字符串形式

不必多说了

压缩的十进制数串形式

一个字节存放两个十进制数位,因为一个字节8位,只要4位便能表示出16个数,因此没关系。可以用BSD编码或者ASCII码低4位表示。符号位也要占半个字节(4位)并放在最低数字位之后,那么问题来了,它放在哪里呢?

一般来说,用C表示正号,用D表示负号,并放在末尾,这与其他表示法不同,还有一个规定是,一个数必须占偶数个半字节,也就是要占满字节,这个很明显,如果是奇数个半字节在前面添加0就行了。

要指明一个压缩的十进制字符串,需要给出它在主存中的首地址和数字位个数(不含符号位,主要是为了位长方便,自己读取时要读取上),位长为0时其值为0,许多机器规定该长度从0~31,更长也没有关系。

机器码表示法

机器码就是原反补移码,

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值