2012-09-10 71 views
1

如何转换一个int为float(返回为无符号,而是解释为float)?我不能使用任何高级语言结构,如工会,只能按位老年退休金计划,控制逻辑(如果/当)+和 - 等转换INT漂浮在C(无铸造)

+8

这是一门功课?你试过什么了? – Levon

+0

这是如何构造“浮动”值被访问? – 2012-09-10 01:35:51

+0

您可以谷歌IEEE浮点格式标准,并找出如何旋转位来设置您的整数到“分数”和适当的值到“指数”。 –

回答

5

肯定。您当然可以从原始字节缓冲区构造一个浮点数。单精度float s在IEEE-754中表示为32位值,可以很容易地表示整数空间。 wikipedia entry on IEEE floating point描述了各种格式。你所要做的就是确定要设置或测试哪些位。请看wikipedia page on single-precision以了解这些位的很好的描述。这里是一个开始:

float convert_int(unsigned int num) { 
    float result; 
    unsigned int sign_bit = (num & 0x80000000); 
    unsigned int exponent = (num & 0x7F800000) >> 23; 
    unsigned int mantissa = (num & /* insert mask value here */); 

    /* you can take over from here */ 

    return result; 
} 

我留下了很多高达想象,但我有一种感觉,这是一个家庭作业的问题。一旦你理解了我写的部分,其余部分应该很容易。一个好得多的解决方案是使用一个union,但我会离开,作为一个读者做练习为好。

+0

@pst - 是的,我可能应该以友好的方式离开他们=) –

-3

如果你不想使用任何算术或按位运算符,那么你可以使用一个方法,

float convrt(int x) 
{ 
    return x; 
} 

它将返回浮动...你可以在主要验证它..

void main() 
{ 
    int x=5; 
    cout<<"size of x=" << sizeof(x); 
    cout<<"size of convrt(x)=" << sizeof(convrt(x)); 
} 

它会给输出作为

size of x=2 
    size of convrt(x)=4 

,这意味着它被转换成浮点。 :-)

+0

标题:“不投”。这隐含地施放。他们明确表示他们想要一个按位解决方案。 –