为什么IEEE754的偏移量是127而不是128呢

最初出现这个问题是因为我遇到一个将IEEE754转化为十进制的问题,而我的做法是这样的:
因为IEEE754阶码采用移码的形式出现,然后我先把他符号位取反换成了补码,之后转化为了原码,但在对照答案时,我发现我的计算结果要比正确答案小1;百思不得其解。

用一个例子来说明一下我当时的计算思路:

  1. 已知阶码是 1000 0011
  2. 求其补码是 0000 0011
  3. 发现其符号位是0,故为正数,故原码和补码相同,故+3

正确答案说:

1000 0011=128+3-127=4
出现这样的结果,我发现是因为 如果偏移值是128的话,我的答案就是正确的,但这里的偏移值是127

之后我看了一下网上的说法,大体上分为了两种:
其一: 偏移值有8位 其范围本来应该是0-255,如果他是一个带有符号位的八位数的话,就应该是-127~+127;但IEEE754又规定:当阶码全为0时(0000 0000)根据符号位,有正0和负0之分;当阶码全为1时(1111 1111)根据符号位,有正无穷大和负无穷大之分。 于是我们去掉这两个边界,其范围就成了1-254,-127~+127 就变成了-126 ~-0和1 ~127 ,即-126 ~+127.
范围那里再说详细点就是 去掉的是0000 0000和1111 1111,考虑其是带符号的,故0000 0000应该是+0,1111 1111应该是-127,也就是在原来的-127 ~+127上删掉了+0和-127,所以最终范围成了-126 ~-0 和1~127,合并起来就是-126 ~127.

从结果上看,这也保证了指数取值范围的对称性,其根本是来自于那个最高位被拿去当符号位了的原因。

其二:
1)偏移值为127时,绝对值范围大致是: 1.2 × 1 0 − 38 1.2\times10^{-38} 1.2×1038~ 3.4 × 1 0 + 38 3.4\times10^{+38} 3.4×10+38
2)如果偏移值取为128时, 绝对值范围大致是: 5.9 × 1 0 − 39 5.9\times10^{-39} 5.9×1039~ 1.7 × 1 0 + 38 1.7\times10^{+38} 1.7×10+38
可见偏移值取127时,上下范围基本对称,相对合理点。

可参考https://blog.csdn.net/programmer_at/article/details/54882503?utm_source=blogxgwz7

你可能感兴趣的:(为什么IEEE754的偏移量是127而不是128呢)