浮点数在内存中的存储
根据国际标准IEEE(电⽓和电⼦⼯程协会)754,任意⼀个⼆进制浮点数V可以表⽰成下⾯的形式:V = (−1) ^S* M ∗ 2^E
• (−1)S 表⽰符号位,当S=0,V为正数;当S=1,V为负数
• M表⽰有用数字,M是⼤于即是1,⼩于2的
• 2E 表⽰指数位
列如:5.0(5的二进制为101)=1.01*2^2=(-1)^0*1.01*2^2
对于任意一个浮点数我们都可以将其写雷同于科学计数法的方式,只是这里使用的是二进制,同时用-1的0次大概1次来表示,即都可以写成IEEE754所规定的标准,其实计算机在进行储存的时候,就是储存的S,M,E这三个数
对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有用数字M对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有用数字M
计算机对于M的存储
由于每一个M都有一个1,以是计算机就可以直接储存M的小数部门,如许就避免了浪费一个bit位,多一位来存储小数,可以提升精度。
十进制小数转化为二进制
对于小数点背面的部门,一般的放法是乘2法,即对于十进制的小数先乘以2,要是有进位1,就拿出来,要是没有,就拿出来0,然后继续拿出乘以后的小数点乘以2,如许一直循环,直到乘出来数字没有小数了,按照先后顺序排列这些拿出来的0大概1,即为对应的二进制数列
https://i-blog.csdnimg.cn/direct/66af71218be84db8a1e0cf350200eac5.png
但对于一些相对于简单的,我们就可以根据二进制中小数部门的权重来直接写出,0.11111对应的权重从左到右分别就是2的负一次(0.5),2的负二次(0.25),2的负三次(0.125).....,我们通过这些组合就不难看出一些简单的小数,列如0.75就是0.5+0.25即二进制0.11
同时,对于一些小数,3.14无法正确的算出其二进制的小数位,此时计算机就会储存一个非常接近的数字来表示它
计算机对于E的储存
我们知道,在科学计数法中,E既可以是正数,也可以是负数,那么我们该怎么储存呢......
IEEE754于是就规定,我们在存储的时候,必须要给E加上一个中心值,让E成为一个正数,对于8位的E,中心值位127,对于11位的E,这个中心值位1023。列如:2^10,E=10,对于8位E来说,储存的数字就即是10+127=137。
对于一些特殊的E
1.E全为1,2的这么多次将是一个极其大的数字,计算机将以为存储的是一个无穷大的数字
2.E全为0,2的负这么多次将是一个非常小的数字,计算机对于此类数字E=1-127(1-1023)表示真实值,同时M不再加上1,计算机用来表示一个非常接近于0的数字,或则是正负0.
列如https://i-blog.csdnimg.cn/direct/189483041404465ab54310437a26ecf0.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]