7

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

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

4

2 回答 2

10

我需要一种跨架构方式来确保浮点数为 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
}
于 2012-07-16T02:17:28.737 回答
6

由于浮点数据大小与 CPU 相关,因此没有标准兼容的方式来执行此操作。该IEEE-754标准(据我所知,所有支持浮点的处理器都使用该标准)将单精度浮点值定义为 4 字节。

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

如果您对此感到担心,可以使用 astatic_assert来确保sizeof(float) == 4; 但是,这不是您会遇到的问题,我无法想象。如果是这样,您应该逐个处理它(这实际上将是逐个架构的基础。)

于 2012-07-16T02:16:23.710 回答