java里float的存储方式与ieee754的研究

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
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值