1、简单介绍:
2、M的存储:
对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。这个就是float类型
对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。这个就是double类型。
⼗进制的5.0,写成⼆进制是 101.0 ,相当于 1.01×2^2,。任意数如果用科学计数法表示,则一定可以表示成1.xxx *(进制)^E,既然这样,那么就规定E只存入小数点后面的数字,如上例子就是存入01。
3、E的存储:
E是无符号类型,但是用科学计数法表示的数字指数有可能是负数,这该怎么存呢?规定E的真实值加上中间值存进E里。比如说float类型的数,float a = 0.5;二进制就是1*2^-1,float类型的E有8位,中间值就是2*7-1——>127,存进E的就是-1+127=126
*注意*(float类型为例)
E全为0,真实值就是1-127,写出来就是x*2^-127,有效数字M不再加上第⼀位的1,为0.xxxxxx的⼩数,这个数字非常小,接近零,同常表示无穷小的数或者零。
E全为1,此时E是2*8-1,那么真实值再减一,就是128,写开就是1.xxx*2*128,这是个非常大的数。
4、练习:
讲得差不多了,来个题练练手。
大家思考一下这个题
怎么样,和你想得一样吗?接下来讲一下这个
int n = 9 这里n是个整型,存储形式是 00000000000000000000000000001001,用%d打印n自然是9,那么用%f打印呢,此时就认为是个float类型, 0 00000000 00000000000000000001001
0是符号位,(-1)^0=1,表示是正数。00000000 是E,真实值是1-127=126,所以这个数非常小,认作是0。
下面把9.0存入,此时认作是float类型。9.0的二进制是1001,科学计数法是1.001*2^3, 3+127作为E,所以存储形式是 0 10000010 00100000000000000000000,用%f打印自然是9.0.
但是用%d打印就是将它看作整型,此时 0 10000010 00100000000000000000000 就是一个十分大的数。
好了,今天的分享就到这里了,欢迎大家再评论区讨论。