如何转换一个int为float(返回为无符号,而是解释为float)?我不能使用任何高级语言结构,如工会,只能按位老年退休金计划,控制逻辑(如果/当)+和 - 等转换INT漂浮在C(无铸造)
回答
肯定。您当然可以从原始字节缓冲区构造一个浮点数。单精度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
,但我会离开,作为一个读者做练习为好。
@pst - 是的,我可能应该以友好的方式离开他们=) –
如果你不想使用任何算术或按位运算符,那么你可以使用一个方法,
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
,这意味着它被转换成浮点。 :-)
标题:“不投”。这隐含地施放。他们明确表示他们想要一个按位解决方案。 –
- 1. 铸字DXVA2_Fixed32漂浮在C++
- 2. 奇怪行为,当铸造numpy.float64漂浮
- 3. 铸造结构转换成int
- 4. 铸造int作为浮点数
- 5. 铸造int或浮动取决于is_integer
- 6. 铸造为int和浮点错误?
- 7. C#铸造INT浮动抛出异常(在运行时)
- 8. 铸造的问题不能从虚空转换为浮动C++
- 9. 指定的强制转换无效铸造的int字节
- 10. Java铸造转换?
- 11. 无法转换为Unicode数据漂浮
- 12. 转换溢出了一个int列。 Witouth转换()或铸造()
- 13. Cast漂浮到int或int来浮动?
- 14. 从signed int转换为unsigned int而不铸造
- 15. 浮到int在C + +号转换
- 16. 漂浮在C++
- 17. 影响铸造为int在C#
- 18. 铸造对象为int在C#
- 19. C#类型铸造或转换
- 20. C#与转换运算符铸造
- 21. c#<dynamic>铸造或转换
- 22. 如何从字符串转换为int /漂浮在C++ 17的std:from_chars
- 23. INT为bool铸造
- 24. 铸造长到int
- 25. (C++)铸造INT为char指针(INT是在INT形式字符)
- 26. 转换铸造问题
- 27. 铸造类型和转换
- 28. 铸造,拆箱,转换..?
- 29. 不能转换为varchar漂浮在SQL
- 30. 铸造在C#
这是一门功课?你试过什么了? – Levon
这是如何构造“浮动”值被访问? – 2012-09-10 01:35:51
您可以谷歌IEEE浮点格式标准,并找出如何旋转位来设置您的整数到“分数”和适当的值到“指数”。 –