我需要一种跨体系结构的方式来确保浮点数为4个字节(就像在32位窗口上一样)。例如,在我创建的结构中,我使用而不是int
来确保一个长度为4个字节的整数值。确保浮点大小为4字节的C++
我怎么能用浮子做这个?我知道我可以用类型替换该值;然而,当在64位系统上强制转换为float时,我不会遇到问题吗?
我需要一种跨体系结构的方式来确保浮点数为4个字节(就像在32位窗口上一样)。例如,在我创建的结构中,我使用而不是int
来确保一个长度为4个字节的整数值。确保浮点大小为4字节的C++
我怎么能用浮子做这个?我知道我可以用类型替换该值;然而,当在64位系统上强制转换为float时,我不会遇到问题吗?
我需要一个跨架构的方法来确保float将是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
}
由于浮点数据大小与CPU有关,所以没有符合标准的方法来执行此操作。 IEEE-754
标准(支持浮点的所有处理器都使用我所知)将单精度浮点值定义为4字节。
没有标准提及的原因是因为C的编写者不想将自己绑定到浮点的特定实现上,以防标准更改或更新。而且还因为CPU决定了单精度浮点数和双精度浮点数的大小和实现,所以它不是编译器关心的问题。
如果您担心,可以使用static_assert
以确保sizeof(float) == 4
;不过,这不是你要碰到的问题,我不会想象。如果是这样,你应该在个案的基础上处理它(这实际上是一个逐架构的基础)。
这很合理。我将不得不更多地阅读IEEE-754标准(每个人都会围绕这些标准进行讨论,但我仍然试图了解它们是什么以及它们如何相互配合)。 – Qix 2012-07-16 02:39:20
如果你还在身边,你应该把接受的答案提供给Rob-phi。我只是扩大了他的答案。 – OmnipotentEntity 2012-07-16 02:45:43
该标准甚至不保证存在4字节的'float'。但是我想象一下,找到一个sizeof(float)!= sizeof(int32_t)''的架构是非常困难的。 – Mysticial 2012-07-16 02:16:51
我有个坏消息:'__int32'不是跨平台的。 – 2012-07-16 02:18:10
*旁白*:'__int32'不保证存在于每个(或任何)系统上。改为尝试'int32_t'。 – 2012-07-16 02:18:16