引用 | 編輯
dfgkopeeed
2011-11-02 00:37 |
樓主
▼ |
||
|
引用 | 編輯
ebolaman
2011-11-02 18:32 |
1樓
▲ |
關於浮點數儲存的方法與解讀,請參考維基百科 :
Single precision floating-point format Double 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 x0 |