如何将int转换为float(以无符号形式返回,但解释为float)?我不能使用任何高级语言结构,如联合,只有按位操作,控制逻辑(if / while),+和 - 等。
答案 0 :(得分:5)
不确定。您当然可以从原始字节缓冲区构造浮点数。单精度float
在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
,但我会将其作为练习留给读者。
答案 1 :(得分:-3)
如果您不想使用任何算术或按位运算符,那么您可以使用方法
float convrt(int x)
{
return x;
}
它将返回浮动...你可以在main中验证它..
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
这意味着它被转换为float。 : - )