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