如何在将decimal / int转换为float

时间:2015-09-14 02:06:34

标签: c floating-point

我有一个整数-2147483647,十六进制为0x8000001。 当我使用在线浮动转换器时,由于四舍五入,它表示它将转换为-2147483648。

现在我必须在c中以单精度实现这个int-to-float函数。

我已经实现了所有其他功能,但我不知道四舍五入。 我什么时候决定何时回合?

**编辑: 这是我到目前为止的功能。 (按功能如何工作的顺序)
1)首先,我检查int是否为负数,其中我否定它并将其分配给unsigned int。我还将符号位设置为1。

2)为了得到指数,我搜索第一个' 1'位于unsigned int左侧的位,并得到它的位置。

3)我向该位置添加127并将其向左移位23位以符合IEEE 754标准。

4)对于我在2)上的位置计数器,我将unsigned int对齐到右边,这样第31位就是第二个最右边的' 1'位。 (因为你省略了第一个' 1'位,因为它假设在每个IEEE浮点数中)

5)我向右移9位,使其适合标准的尾数槽。

6)我添加了符号位,指数和尾数,以获得原始int的最终位表示。

1 个答案:

答案 0 :(得分:1)

单精度-2147483647的三个最接近的值,如十六进制和整数所示:

hex ceffffff = -2147483520
hex cf000000 = -2147483648
hex cf000001 = -2147483904

因此使用hex cf000000 = -2147483648,因为它是最接近的。