计算机中整数和浮点数的存储方式

整数的存储是将十进制为的整数转换成其相应的补码后存储。

现如今的计算机中浮点数的存储都是遵循IEEE754/854标准。

IEEE 754.R32.24,IEEE 754 R64.53单精度是32位,双精度是64位。

计算机中整数和浮点数的存储方式

计算机中整数和浮点数的存储方式

S :符号位,0位正,1为负,对于数值为0的符号位解释则要作特殊情况处理

M:尾数,二进制小数

E:指数位,作用是对浮点数加权

转换:

十进制数值为正,S为0,数值为负,S为1。

将十进制数转换为二进制数,小数点以前的书正常转换,小数点以后的数按照以下方式进行匹配运算。其实主要是用十进制后面的小数部分乘以2,如果结果小于1,就记为0,如果结果大于1就记为1,这样的求解方式中,如果是小数部分不符合以下所示部分,其转换结果均为近似值。这就是浮点数计算精度损失的原因。

计算机中整数和浮点数的存储方式

转换成小数后,将其再次转换成1.xxx ✖️2n的形式表现。因为最后所有的数的开始都是1,所以这第一位的1不显示的表示,这就是为什么23位能够表示24位数的原因。

然后依次按浮点数表示形式的数据结构进行填充就可以。以单精度为例,第一位符号位,然后是8位的指数位。这个指数位的计算是用指数n加上127.这样处理的原因是为了处理负指数的情况,需要加上一个偏置值,单精度是127,双精度是1203,这样的原因是指数位的0和255是作为特殊值进行处理的。由此之后,例如是127 + 3 = 130 ,其实是用01111111(单精度) + 11 = 100000010。然后将转换后的二进制值小数点后的xxx作为有效数字进行存储,右边尾数不够补0即可,此处可以看到小数点前的1是不进行存储的。

此处稍微的补刀一下,为什么要加这个偏移量127,前面说了,是为了处理负指数的情况,那么是如何处理的的呢。即以这个偏移量为基准,大于这个偏移量,也就是127就是正指数,小于这个偏移量就是负指数,当然等于偏移量,指数就为0。此时表示的是从0~255,因为0和255表示特殊值,即1-254就表示8位中所表示的所有正负数。

举个栗子吧!

-8.246

符号位:数值为负数,即为1

指数位:8 —> 1000

0.246 -> 0.00111110111110011101101

=> 1000.00111110111110011101101 = 1.00000111110111110011101101×23,即存储形式为

1 1000 0010 00000111110111110011101

至于精度,尾数23位即为其能够表示的精度,将其转换为十进制就是能够表示精度位数。