用C++打印浮点数的二进制表示

Pet*_*o M 3 c++ floating-point

可能重复:
在C++中浮动到二进制

我想在C++中打印出浮点数的二进制表示.出于好奇,不太实用.

以下程序不能编译.reinterpret_cast失败.我可以使用什么样的演员表以便我可以做"&(1 << i)"部分?

#include <iostream>
using namespace std;


void toBinary(float num) {
  int numi = reinterpret_cast<int>(num);
  cout << num << " " << numi << endl;
  for (int i = 0; i < 8 * sizeof(num); i++){
    if (numi & (1<<i)) {
      cout << 1;
    } else {
      cout << 0;
    }
  }
  cout << endl << endl;
}

int main() {
  float a;
  cout << sizeof(int) << " " << sizeof(float) << endl;
  a = 13.5;
  toBinary(a);
  toBinary(13.9);
  toBinary(2 * a);
  toBinary(-a);
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*som 15

有一个更简单的方法.获取指向浮点数的指针,并将其重新解释为指向char的指针.现在循环sizeof(float)并将每个char转换为8位二进制数字.这种方法也适用于双打.

  • 不,因为`char*`不受严格别名规则的限制.(必须有一些方法来获取对象中的字节.) (5认同)