廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 4023 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
dfgkopeeed
數位造型
個人文章 個人相簿 個人日記 個人地圖
路人甲
級別: 路人甲 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[C/C++][討論] C語言 用<指標>寫程式的問題
想請問各位網路的大大該如何運用指標(pointer + bit hac ..

訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容



獻花 x0 回到頂端 [樓 主] From:臺灣教育部 | Posted:2011-11-02 00:37 |
ebolaman 手機 會員卡
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎

級別: 副版主 該用戶目前不上站
版區: 程式設計
推文 x38 鮮花 x458
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

關於浮點數儲存的方法與解讀,請參考維基百科 :


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



[ 此文章被ebolaman在2011-11-05 12:15重新編輯 ]


My BOINC stats :

獻花 x0 回到頂端 [1 樓] From:臺灣教育部 | Posted:2011-11-02 18:32 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.019583 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言