查找浮点类型的内存格式

Find float type's memory format

本文关键字:内存 格式 类型 查找      更新时间:2023-10-16

如何找到floatdouble类型的内存格式?

我的意思是符号,指数和分数的位。

我的意思是符号,指数和分数的位。

您可以使用std::numeric_limits<T>::digits获取Mantissa位,std::numeric_limits<T>::is_signed获取标志位。

您并从sizeof(T)*CHAR_BIT扣除其总和以猜测指数数字,但是如果类型有填充,这可能是不正确的。例如,long double是典型的。

查找浮点类型的内存格式

当然,不仅块的数量很重要,而且订单也很重要。这些功能对您无济于事。他们还假设std::numeric_limits<T>::radix == 2

对于确切的格式,您必须咨询CPU Architechture的手册。


我想将浮点号保存到硬盘上,并想知道是否有一个很好的方法来制作文件交叉平台。

最典型的解决方案是在保存到磁盘时将浮点转换为文本表示:0x1.8p+0。它不是最有效的,但它是可移植的(尽管您必须确定编码文件要使用的字符,如果不是系统的本地,则需要进行转换)。

<</p>

要以跨平台方式将浮点数保存到磁盘,请查找我的github项目

https://github.com/malcolmmclean/ieee754

我还发挥了用于便于读取二进制整数的功能,因为它比一见钟情略多。

如果要测试内存格式,则需要创建具有某些战略值的浮子,然后查询位模式。除非您使用怪异而奇妙的硬件,否则零应该是所有位零和特殊情况。1和-1应该有所不同,这是您签名的。2和1的指数应有所不同,两个测试功能应告诉您指数位以及何时用完。速度的两个功率测试能力。

然后,您可以通过将1个功率储存1,例如3,7等来获取Mantissa。

通过探测它可以建立一个记忆模式,但是它几乎总是IEEE 754。