作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个程序,它在两个处理器上运行,其中一个不支持浮点。因此,我需要在该处理器中使用定点执行浮点计算。为此,我将使用浮点仿真库。
我需要先在支持浮点的处理器上提取 float 的符号、尾数和指数。所以,我的问题是如何获得单精度 float 的符号、尾数和指数。
按照这张图的格式,
这就是我到目前为止所做的,但除了符号,尾数和指数都不正确。我想,我错过了什么。
void getSME( int& s, int& m, int& e, float number )
{
unsigned int* ptr = (unsigned int*)&number;
s = *ptr >> 31;
e = *ptr & 0x7f800000;
e >>= 23;
m = *ptr & 0x007fffff;
}
最佳答案
我觉得还是用union做cast比较好,比较清晰。
#include <stdio.h>
typedef union {
float f;
struct {
unsigned int mantisa : 23;
unsigned int exponent : 8;
unsigned int sign : 1;
} parts;
} float_cast;
int main(void) {
float_cast d1 = { .f = 0.15625 };
printf("sign = %x\n", d1.parts.sign);
printf("exponent = %x\n", d1.parts.exponent);
printf("mantisa = %x\n", d1.parts.mantisa);
}
关于c - 如何获取 float 的符号、尾数和指数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15685181/
单精度(32 位):位除法为 like this : 所以我们有 23 位的尾数/有效数。 因此我们可以表示 2^23 个数字(通过 23 位):即 8388608 --> 7 位长。 但是 我读到尾
所以,我正在尝试编写一个函数,以其 (mantissa * 2^exponent) 格式打印给定的 float (n)。我能够得到符号和指数,但不能得到尾数(无论数字是多少,尾数始终等于 0.0000
我是一名优秀的程序员,十分优秀!