关于浮点数储存的方法与解读,请参考维基百科 :
Single precision floating-point formatDouble precision floating-point format
用指标来存取只要用
8 bits 的 bool 型态,每次读取 float 记忆体中的 一部分 (总共 4 部分)
就能将数字输出成 binary 的方式
以下是示范 输入一个 float 数字,将 他的 32 bits 全部输出的 C++ 程式码:
不过底下的输出是颠倒的,可以看到 输入负数时最后一个 bit 是 1
复制程式
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <bitset>
using namespace std;
int main(int ctArg, char* cArg[], char* cEnv[])
{ /// @Main
///========== Data ==========
float num = 0;
bool* ptrBool;
bitset<sizeof(bool) * 8> bitBool;
///========== Temp. ==========
int i, j;
/////////////////////////////////////////////////
/////////////////////////////////////////////////
///========== Input & Output ==========
while (true)
{
cout << "Please input a number : ";
cin >> num;
if (cin.fail()) return 0;
///========== Convert ==========
ptrBool = (bool*) & num;
for (i = 0; i < (int) (sizeof(float) / sizeof(bool)); i++)
{
bitBool = *ptrBool;
for (j = 0; j < (int) bitBool.size(); j++)
cout << bitBool[j] << " ";
cout << " ";
ptrBool ++;
}
cout << endl;
}
return 0;
}
反之亦然,读取使用者的 32 bits 后,先让每 8 个 bits 转成 bool 的数字
然后再来指标到 float 的位置,指定指标的数值,然后 offset 每次往右移动 8 bits 连续设定 4 次,就能推回 float 数值
另外可以参考一下这个网站,有蛮多关于 如何使用 二元逻辑 来运算 bits 的程式码与介绍 :
Bit Twiddling Hacks