广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 4222 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为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.013610 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言