Java里有byte ,short,int,long四个整数类型,float,double两个浮点数类型,char字符类型和boolean布尔类型8个基础类型。
在cpu或者内存,硬盘里都是用二进制存储的。
在java里 float占个字节,也就是32位。

  • 第1位是符号位; 0代表正,1代表负数,设代表F(正负1)。

  • 第2~9位是8位的阶码; 代表科学计数法中的指数,在前面补0,规定他的值为实际指数+127(1111111),设值位为P。

    问题:为什么不用符号位来指定这里的正负

    解答:便于浮点数比大小。
    如果阶码(指数)也用补码来表示,就会使得一个浮点数中出现两个符号位:浮点数自身的和浮点数指数部分的。这样的结果是,在比较两个浮点数大小时,无法像比较整数时一样使用简单的无逻辑的二进制比较。

    故而浮点数的指数部分采用了移码(无符号整数)来表示。
    作者:millionhere
    链接:https://www.zhihu.com/question/24115452/answer/47728267
    来源:知乎

  • 第10~32是23位的尾数; 代表数值的有效数字的二进制的科学计数法中的小数部分,在后面补0(去掉第一个1后作为小数点后的数字,如101010),设值为X。

则实际的浮点数为 Y=F((1+X)*2^(P-127))

例如:2.25,先转换成10.01,然后其尾数自然为去掉1之后的001后面跟20个0
然后计算其阶码,因为10.01整数部分有两位故指数为1,则阶码为1+127=128 即为 10000000
java里float的存储方式与ieee754的研究

相关文章: