C ++确保浮点大小为4个字节

时间:2012-07-16 02:14:33

标签: c++ floating-point cross-platform size consistency

我需要一种跨架构的方法来确保浮点数为4个字节(就像在32位窗口上一样)。例如,在我正在创建的结构中,我使用__int32而不是int来确保一个4字节长的整数值。

我怎么能用漂浮物来做这件事?我知道我可以用__int32类型替换该值;但是,当在64位系统上转换为浮点数时,我不会有问题吗?

2 个答案:

答案 0 :(得分:9)

  

我需要一种跨架构的方法来确保浮点数为4个字节

浮点值没有int32_t的模拟值。

实现所需内容的唯一跨平台方法是使用运行时或静态断言对其进行测试。

#include <cassert>
int main () {
    assert(sizeof(float) == 4);
    // If control reaches this line, then you've 
    // ensured that float is 4 bytes.


    // rest of your program goes here
}

答案 1 :(得分:6)

没有符合标准的兼容方法,因为浮点数据大小与CPU相关联。 IEEE-754标准(据我所知,支持浮点的所有处理器)将单精度浮点值定义为4个字节。

没有标准提及的原因是因为C的编写者不希望将自己绑定到浮点的特定实现,以防标准更改或更新。而且因为CPU确定单精度浮点数和双精度浮点数的大小和实现,所以它不是编译器所关心的。

如果您对此感到担心,可以使用static_assert确保sizeof(float) == 4;但是,这不是你要碰到的问题,我无法想象。如果它是你应该逐个处理它(这实际上将是一个逐个体系结构的基础。)