OS - 为什么偏移值为2^(n-1)-1而不是 2^(n-1)呢?
Posted Lux_Sun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OS - 为什么偏移值为2^(n-1)-1而不是 2^(n-1)呢?相关的知识,希望对你有一定的参考价值。
由于阶码实际存储的是指数的移码, 所以指数与阶码之间的换算关系就是指数与它的移码之间的换算关系。假设指数的真值为e,阶码为E,则有E = e + ( - 1),其中-1是IEEE754标准规定的偏移量,n= 8是阶码的二进制位数。
为什么偏移值为 -1而不是 呢?因为 8 个二进制位能表示指数的取值范围为[-128,127],现在将指数变成移码表示, 即将区间[-128,127] 正向平移到正数域,区间里的每个数都需要加上128,从而得到阶码范围为[0, 255]。由千计算机规定阶码全为 0 或全为 1 两种情况被当作特殊值处理(全 0 被认为是机器零, 全 1 被认为是无穷大),去除这两个特殊值,阶码的取值范围变成了[1, 254]。如果偏移量不变仍为 128 的话, 则根据换算关系公式 [x] 阶 = x + 128 得到指数的范围变成[-127, 126],指数最大只能取到126,显然会缩小浮点数能表示的取值范围。所以IEEE754标准规定单精度的阶码偏移量为 -1(即127),这样能表示的指数范围为[-126, 127],指数最大值能取到127。
以上是关于OS - 为什么偏移值为2^(n-1)-1而不是 2^(n-1)呢?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 pytz 在跨越 TZ 和 DST 边界而不是 TZ 名称时正确调整时间和偏移量?