如何获得浮点数的符号,尾数和指数

我有一个在两个处理器上运行的程序,其中一个没有浮点支持。因此,我需要使用该处理器中的定点执行浮点计算。为此,我将使用浮点仿真库。


我首先需要提取处理器上支持浮点数的浮点数的符号,尾数和指数。因此,我的问题是如何获取单个精度浮点数的符号,尾数和指数。

http://img1.mukewang.com/5d89768a0001200f06290100.jpg

在此处输入图片说明 到目前为止,这就是我所做的,但是除符号外,尾数和指数均不正确。我认为,我缺少了一些东西。


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;

}


翻过高山走不出你
浏览 1666回答 3
3回答

白衣染霜花

您&输入的是错误的位。我想你要:s = *ptr >> 31;e = *ptr & 0x7f800000;e >>= 23;m = *ptr & 0x007fffff;请记住,当您使用时&,您会将未设置的位清零。因此,在这种情况下,您希望在获得指数时将符号位清零,而在获得尾数时希望将符号位和指数清零。请注意,蒙版直接来自您的图片。因此,指数掩码将如下所示:0 11111111 00000000000000000000000尾数蒙版将如下所示:0 00000000 11111111111111111111111
打开App,查看更多内容
随时随地看视频慕课网APP