我刚刚开始学习浮点并了解中小企业的东西。我对尾数仍然很困惑......有人可以向我解释如何获得浮动的exp部分。我很抱歉,如果这是一个非常愚蠢和基本的问题,但我很难理解它......
另外,我如何实现以下功能......显然我的实现是错误的。但是我该怎么做呢?
// Extract the 8-bit exponent field of single precision
// floating point number f and return it as an unsigned byte
unsigned char get_exponent_field(float f)
{
// TODO: Your code here.
int bias = 127;
int expp = (int)f;
unsigned char E = expp-bias;
return E;
}
答案 0 :(得分:1)
如果要从float
值(超过127表示法)中提取 IEEE-754单精度指数,可以使用float函数,或者您可以使用带有 shift 和掩码的简单联合来执行相同操作:
unsigned float_getexp (float f)
{
union {
unsigned u;
float f;
} uf;
uf.f = f;
return (uf.u >> 23) & 0xff;
}
如果你想要实际指数 bias (即在隐藏位去除之前的标准化过程中尾数小数移位的位数),只需减去{{1}从返回的值开始,或者如果你想要返回的值,在返回之前减去它。
尝试一下,如果您有疑问,请告诉我。 (注意: 127
应该是type
代表你的指数,而不是你拥有的unsigned
。
答案 1 :(得分:0)
首先,获取浮点数并通过分别转换积分和小数部分来计算其二进制形式。一旦你得到了,说你有11010.101(基数为2)。 规范化二进制字符串:1.1010101 x 2 ^ 4。接下来,将超出的值(比如超过15)添加到sci的指数中。不。价值,这将给你19(基数十)。将其转换为base-two;这将是你的指数。
这只是操作的结构,插入你自己的偏见等。