如何将 int 转换为浮点数(以无符号返回,但解释为浮点数)?我不能使用任何高级语言结构,如联合、仅按位运算、控制逻辑(if/while)、+ 和 - 等。
问问题
14077 次
2 回答
5
当然。您当然可以从原始字节缓冲区构造一个浮点数。单精度float
s 在 IEEE-754 中表示为 32 位值,可以很容易地表示整数空间。IEEE 浮点的维基百科条目描述了各种格式。您所要做的就是弄清楚要设置或测试哪些位。查看关于单精度的维基百科页面以获得对位的详细描述。这是一个开始:
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;
}
我留下了很多想象力,但我有一种感觉,这是一个家庭作业问题。一旦你理解了我写的部分,剩下的应该很容易完成。一个更好的解决方案是使用 a union
,但我也将把它作为练习留给读者。
于 2012-09-10T01:52:44.067 回答
-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
这意味着它被转换为浮点数。:-)
于 2012-09-10T11:19:37.413 回答