2

我正在用 C++ 编写一个程序,它将不同的数据存储在一个二进制文件中。我遇到了问题,因为数据类型的大小可以从一个系统更改为另一个系统。我想知道在所有 Windows 平台上浮点数是否总是 4 字节。我构建这个程序的唯一平台是windows。

4

4 回答 4

3

不受 C++ 标准的保证,但当今大多数机器都遵循 ISO/IEC/IEEE 60559:2011 或相同的IEEE-754 浮点标准。按照这个标准,单精度float是 4 个字节。

您可以检查std::numeric_limits< float >::is_iec559<limits>确保。

于 2013-10-19T13:24:27.647 回答
2

是的。当然,在其中抛出一个static_assert(sizeof(float)==4, "whatever")(或一个普通的旧非静态断言,如果您的编译器不支持前者)可能是明智的,只是为了(a)记录您的假设,并且(b)如果通过一些残酷的命运转折你的平台突然没有 4 字节浮点数。

于 2013-10-19T13:20:31.243 回答
0

Windows 没有定义float-- 你的编译器定义的大小。

Windows 定义的是一个FLOAT在windef.h 中命名的类型。它被定义为typedef float FLOAT;。这是 Win32 API 使用的类型名称,如果 Windows 支持对您很重要,您应该使用该名称。我怀疑任何 Windows 编译器都会改变其float类型的格式,但微软当然可以改变它们的typedeffor FLOAT,这将改变它float在所有版本的 Windows 上支持的意义。

于 2013-10-20T03:49:05.007 回答
0

是的,它只有 4 个字节,但不能保证。您可以检查IEEE 浮点以供参考。

您可以通过这样的跨平台行为进行检查:-

#include <cassert>
int main () {
    assert(sizeof(float) == 4);
    // If control goes here you can be sure float is 4 bytes.

}
于 2013-10-19T13:22:11.223 回答