如何在计算机内存中打印long double的二进制表示形式?

时间:2016-06-16 13:58:37

标签: c++ binary floating-point long-double

出于某些原因,我必须打印long double号码的二进制表示。我希望看到它保留在计算机内存中的确切格式。

我经历了以下问题,其中union是解决方案。对于float,备用数据类型为unsigned int,因为它们都是32位。对于double,它是unsigned long int,因为它们都是64位。但在long double中,它是96位/ 128位(取决于平台),它没有类似的等效内存消费者。那么,解决方案是什么?

访问的问题:

  1. Print binary representation of a float number in C++
  2. Binary representation of a double
  3. Exact binary representation of a double
  4. How do I display the binary representation of a float or double?
  5. 注意:

    它被标记为问题How to print (using cout) the way a number is stored in memory?的副本!

    真的吗?提到问题的问题是关于整数,并且接受的解决方案是bitset,它只是截断了浮点部分。我的主要观点是浮点表示,与该问题的内容无关。

1 个答案:

答案 0 :(得分:7)

与往常一样,别名任意内存的方法是使用unsigned char s数组。期。所有这些" union"解决方案具有不确定的行为,因此实际上不是解决方案"任何。

因此,复制到long double数组中,然后逐个打印出字节值。

顺便说一下,#include <iostream> #include <algorithm> int main() { const long double x = 42; unsigned char a[sizeof(long double)]; std::copy( reinterpret_cast<const unsigned char*>(&x), reinterpret_cast<const unsigned char*>(&x) + sizeof(long double), &a[0] ); std::cout << "Bytes: " << sizeof(long double) << "\nValues: "; std::cout << std::hex << std::showbase; for (auto el : a) { std::cout << +el << ' '; } std::cout << '\n'; } 不一定是96位。它取决于平台。

_\d\d

documentation