如何在计算机内存中打印长双重表示的二进制表示



我必须打印出long double编号的二进制表示形式,原因有些原因。我想查看保留在计算机内存中的确切格式。

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

访问的问题:

  1. C 中的浮点数打印二进制表示
  2. 双重表示
  3. 双重代表
  4. 如何显示浮子的二进制表示形式?

注意:

它被标记为问题的重复,如何打印(使用COUT)数字存储在内存中的方式?!

真的吗?提到的问题谈论了整数数字和已接受的解决方案是bitset,它只是截断了浮点部分。我的主要角度是浮点表示,与该问题的内容无关。

一如既往,别名任意内存的方式是用unsigned char s的数组。时期。所有这些"联合"解决方案都有不确定的行为,因此实际上不是"解决方案"。

因此,将复制到unsigned char数组中,然后只打印一个字节值一个。

顺便说一句,long double不一定是96位。这将取决于平台。

#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';
}

(实时演示)

相关内容

最新更新