将double或float转换为整数类型,哪种类型?

时间:2014-07-04 09:10:09

标签: c types casting

如果我想将float或double转换为整数类型,并且我不希望它在任何情况下溢出,我应该如何选择整数类型?

2 个答案:

答案 0 :(得分:2)

floats的范围几乎总是大于long longint64(但可能取决于实施)。

例如,在.Net中,float的范围是3.4E +/- 38,但long longint64的范围是 - 9,223,372,036,854,775,808到{{1 }}。你无法确定你不会溢出。 C和C ++的其他实现具有相似的范围。

来源:http://msdn.microsoft.com/en-us/library/s3f49ktz.aspx

答案 1 :(得分:0)

有一种简单的方法可以将int转换为float和back。这是可能的,因为大多数现代计算机共享32位存储。这允许使用联合。例如:

    union
    {
        float x;
        int i;
    } u;

在这里你可以自由地分配一个浮点u.x=391,然后使用整数表示int myint = u.i没有什么可以阻止与其他存储类一起使用。但是,您必须检查最重要的位并确保1 <= msb < 32,否则您将失败。在double具有msb&lt; 32它接受了类似的治疗。

这不推荐使用,并且是最佳实现定义的行为。 ieee754格式的浮点数字存储定义了32位存储。它本身就是在整个其他讨论中。您可以测试此方法,查看ieee754存储格式并了解它们带来的限制。