整型(int为例):
假如一个整型数据a=1,
一个整型是四个字节(32位比特位)
然后可以写成符号位+数值位,如图
因为这里是正的1,(正数原码,反码,补码相同),(负数原码,反码=原码符号位不变,数值位(其他位)按位取反,补码=反码+1)
这里浅浅的介绍一下大小端存储
小端存储下的1
大端存储下的1
浮点型数据的存储
浮点数转为二进制的算法 (整数部分)
浮点数转为二进制的算法(小数部分)
根据乘2取整法,将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分为零为止。
则0.5转换为二进制的步骤为:
1. 0.5×2=1,取整数部分1;
2. 小数部分为0,转换结束。
因此,0.5转换为二进制是0.1。
v=5.5的浮点数的最终表示结果
在IEEE 754标准中,浮点数的存储方式如下:
- 对于32位的浮点数,最高的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。
- 对于64位的浮点数,最高的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。
在存储浮点数时,S位(符号位)通常存储在最高位,也就是地址的高地址处。而指数E和有效数字M则存储在S位之后的位置,具体的存储顺序可能会因计算机体系结构和编译器的实现而有所不同。
IEEE 754 在存储浮点数时,对尾数 M 和指数 E 有一些特殊规定,具体如下:
- 尾数 M:IEEE 754 规定,在计算机内部保存 M 时,默认这个数的第一位总是 1,因此可以被舍去,只保存后面的部分。比如保存 1.01 的时候,只保存 01,等到读取的时候,再把第一位的 1 加上去。这样做的目的是节省 1 位有效数字。以 32 位浮点数为例,留给 M 只有 23 位,将第一位的 1 舍去以后,等于可以保存 24 位有效数字。
- 指数 E:IEEE 754 规定,指数 E 是一个无符号整数,对于 8 位的 E,它的取值范围为 0 到 255;对于 11 位的 E,取值范围为 0 到 2047。由于科学计数法中的 E 是可以出现负数的,所以 IEEE 754 规定,存入内存时 E 的真实值必须再加上一个中间数,对于 8 位的 E,这个中间数是 127;对于 11 位的 E,这个中间数是 1023。
然后怎么取出浮点数呢?接下来也说一下
根据 IEEE 754 标准,M 是一个小数,它的取值范围是大于等于1,小于2,可以写成1.xxxxxx的形式,其中xxxxxx表示小数部分。
IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的xxxxxx部分。比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字。
根据 IEEE 754 标准,指数 E 从内存中取出时还可以再分成三种情况:
- E 不全为 0 或不全为 1:这时,浮点数就采用下面的规则表示,即指数 E 的计算值减去 127(或 1023),得到真实值,再将有效数字 M 前加上第一位的 1。
- E 全为 0:这时,浮点数的指数 E 等于 1-127(或者 1-1023)即为真实值,有效数字 M 不再加上第一位的 1,而是还原为0.xxxxxx的小数。这样做是为了表示+0,以及接近于0的很小的数字。
- E 全为 1:这时,如果有效数字 M 全为 0,表示+无穷大(正负取决于符号位 s)。
今天的分享到此结束啦,如果我讲的还行,就点个关注叭!