【发布时间】:2017-02-03 02:01:04
【问题描述】:
我在从浮点数中查找有偏指数时遇到问题。我不明白为什么我从为参数输入的任何数字中返回 0。这是我的代码:
iFloat_t floatGetExp(iFloat_t x)
{
return ((x >> 23) & 0x7f800000);
}
浮点数的指数是从位到 23-30,这就是为什么我向右移动 23 并且掩码为 0x7f800000。
例如,如果我给它传递了 248.875 的浮点数,则指数应该是 22。
【问题讨论】:
-
您屏蔽了错误的位,移位 23 位后,这些位位置将没有任何内容,并且您破坏了移位的结果。当您在移位后屏蔽掉位 0..23 时,您怎么能期望值 22?
-
哦,那我该如何进行正确的遮罩呢?换班前戴口罩吗?
-
您的掩码适用于值之前班次,而不是之后。所以,
((x & 0x7f800000) > 23),或者,更好的是,((x >> 23) & 0xff)都可以,但后者似乎更简单,更容易理解 [IMO] -
除了符号位之外还需要屏蔽吗?
-
@WeatherVane 符号位为 MSB,因此需要使用掩码来隔离指数。否则,转变产生
sgn,exp而不仅仅是exp
标签: c floating-point exponent