关于java中float最大值,最小值问题

其中,在m的赋值过程中,有一个三元运算符,如果e!=0(即指数不为0),那么取bits的前23位数字再或上0x800000,这样取得的数字是24位,而不是23位;如果e==0(即指数为0),那么取bits的前23位数字(这是23位),如果不左移一位的话就与指数不为0的情况所得的位数不一样了。所以要左移一位。...
关于java中float最大值,最小值问题
我想了2个小时吧,虽然答案不确定,但是还是想把自己的想法说出来:
首先,这是API文档的内容:
在所有其他情况下,设 s、e 和 m 为可以通过以下参数进行计算的三个值;

int s = ((bits >> 31) == 0) ? 1 : -1;
int e = ((bits >> 23) & 0xff);
int m = (e == 0) ?
(bits & 0x7fffff) << 1 :
(bits & 0x7fffff) | 0x800000;

那么浮点结果等于算术表达式 s·m·2^(e-150) 的值。

在这里,s表示正负,e表示指数,m表示尾数(即浮点数的有效数字)。
其中,在m的赋值过程中,有一个三元运算符,
如果e!=0(即指数不为0),那么取bits的前23位数字再或上0x800000,这样取得的数字是24位,而不是23位;

如果e==0(即指数为0),那么取bits的前23位数字(这是23位),如果不左移一位的话就与指数不为0的情况所得的位数不一样了。
所以要左移一位。
当然,位数如果有增减,肯定会用s·m·2^(e-150)这个公式中的'150'来弥补以保证数值的正确的。

我是这么理解的,当然也没搞清楚'150'的由来。 仅供讨论吧...2013-12-11
为何要移位,要看intBitsToFloat函数意义和要求。2013-12-11
mengvlog 阅读 7 次 更新于 2025-07-18 21:23:57 我来答关注问题0
  •  翡希信息咨询 Java:找出byte、short、int、long、f1oat和double中的最大数和最小数

    最小值:byte:128short:32768int:2147483648long:2^63float:3.4 × 10^38double:1.7 × 10^308最大值:byte:127short:32767int:2147483647long:2^63 1float:3.4 × 10^38double:1.7 × 10^308重点内容:在这些数据类型中,byte和short是较小的整数类型,int和long是较大的整数...

  •  翡希信息咨询 Java:找出byte、short、int、long、f1oat和double中的最大数和最小数

    最大数: byte:127 short:32767 int:2147483647 long:2^63 1 float:约3.4E38 double:约1.7E308 最小数: byte:128 short:32768 int:2147483648 long:2^63 float:3.4E38 double:1.7E308 注意: float和double的最大值和最小值是基于IEEE 754标准的浮点数表示法得出的近似值。 在...

  • (bits & 0x7fffff)

  • MAX_VALUE,表示float类型能够表示的最大值,其值为3.40282347E38;MIN_VALUE,表示float类型能够表示的最小正值,其值为1.40129846E-45。理解float的取值范围对于编程开发非常重要。float类型使用32位来存储数值,其中1位用于符号位,8位用于指数部分,23位用于尾数部分。这使得float类型能够表示的数值范围...

  • 1. float:大约正负3.4E38之间。这是一个单精度浮点数类型。2. double:大约正负1.7E308之间。这是一个双精度浮点数类型。解释:浮点数类型概述 在Java中,浮点数类型用于表示带有小数点的数值。其中,float是单精度浮点数,而double是双精度浮点数。它们都可以表示正数、负数以及零。这两种类型都有...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部