从其二进制表示形式返回浮点数

时间:2019-07-13 14:06:45

标签: c type-conversion bit-manipulation binary-data

我写了两个函数:

unsigned float_twice(unsigned u)u解释为浮点数的二进制表示形式(bin。rep。),并应返回bin。代表仅通过位操作获得两倍于该浮点数的数字。

unsigned float2unsig(float x)返回bin。代表之x

// For little-endian machines.
unsigned float2unsig(float x) {
    size_t          len=sizeof(float),i;
    unsigned char   *start;
    unsigned        output=0;

    start=(unsigned char *)(&x);
    for (i = 0; i < len; i++){
        output=output|start[i]<<(8*i);
    }
    return(output);
}

验证float_twice对于单个值是否确实按预期工作很简单。例如,对于值88.125,我可以这样进行测试:

float    f=88.125,twf=2*f;
unsigned u=float2unsig(88.125),twu=float_twice(u);
if (float2unsig(twf)==twu) printf("OK.\n");

但是,我想测试float_twice是否有每个无符号u(从0到UINT_MAX),所以我需要一个函数unsig2float来产生浮点数给定它的垃圾箱。代表,但结构类似于float2unsig的东西将无法工作。我想我可以实现IEEE浮点标准规则,但是难道我没有更简单的东西吗?

0 个答案:

没有答案