为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Java 中浮点型(32 位)的指数是 -126 而不是 -128?

为什么 Java 中浮点型(32 位)的指数是 -126 而不是 -128?

大话西游666 2024-01-25 21:55:28
32 位标准:1 位用于数字的正/负值。8 位用于指数,24 位用于尾数。指数为 8 位,即 1 * 2^7 + 1 * 2^6 + ... = 255 当最大指数为 127 时,最小指数应为 -128,因此 126 + 128 = 255。但为什么 Java 说最小指数是 -126 呢?255 - (127+126)= 2,所以有两个数字我们没有使用。
查看完整描述

2 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

这个数字有一个“偏差”,那些位里有什么?首先0x7F从中减去以获得您的值。使用 value 0x01:可以达到最低指数0x01 - 0x7F = 1 - 127 = -126。值达到最高值0xFE0xFE - 0x7F = 254 - 127 = 127

0x00但是,指数值和发生了什么0xFF?这就是为什么有 254 个而不是 256 个唯一指数可用:这两个是特殊的魔法,通常不可用。指数 0 既用于编码 0(如果分数的数字也是 0),也用于编码所谓的次正规数,即非常接近 0 的数字。

0xFF用于特殊值;这就是浮点数存储NaN无穷大的方式。


查看完整回答
反对 回复 2024-01-25
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

有 2 个指数序列编码特殊值。全 0 编码 0 或次正规值,具体取决于尾数。全 1 编码 Infinity 或 NaN。这意味着,正如您所说,有 254 个序列来编码普通数字,而不是 256 个指数序列。

因此,指数 00000001 编码 -126 次方,11111110 编码 127 次方是有意义的。这是正常数的指数范围。


查看完整回答
反对 回复 2024-01-25
  • 2 回答
  • 0 关注
  • 41 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信