【发布时间】:2014-02-27 07:12:10
【问题描述】:
我最近编写了一个代码块,它将来自用户的 8 位十六进制数作为输入,将其转换为整数,然后将其转换为浮点数。要从整数变为浮点数,我使用以下命令:
int myInt;
float myFloat;
myFloat = *(float *)&myInt;
printf("%g", myFloat);
它非常适合小数字。但是当用户输入十六进制数字如:
0x0000ffff
0x7eeeeeef
我得到 myInt = -2147483648 和 myFloat = -0。我知道我为 myInt 得到的数字是可以存储在 C 中的 int 变量中的最小可能数字。
因为这个问题,我的程序的输入范围极其有限。有没有人对我如何扩展我的代码范围有任何建议,以便它可以处理像这样大的数字:
0xffffffff
非常感谢您给我的任何帮助!
【问题讨论】:
-
intToFloat中有什么内容? -
如果您想准确表示 32 位 int 的全部范围,那么您需要使用
double而不是float,因为float只有大约 23-24 位精度。 -
对 intoToFloat 感到抱歉。我修改了我的变量名,这样它们就不会脱离上下文,但我忘了更改那个。
-
“将十六进制数转换为浮点单精度表示”是什么意思?您的意思是要将存储在整数中的位模式视为
float?这大致就是您的代码目前所做的。如果这是你想要的,那么你主要需要整理你的整数转换代码;您应该能够从整数打印十六进制值并获得与输入相同的值,但如果您得到 0x80000000 (-2147483648) 作为输出,则您的转换是错误的。您使用的是哪个编译器,在哪个平台上?小心sizeof(int) == 2(不太可能)。
标签: c floating-point integer type-conversion ieee-754