用位操作实现输出变量位字符及将二进制码转化为相应变量值

以vc为例子,int为4字节,32位

    int a = 10;

    for (int i = 0; i < 32; i ++)
    {
        cout << (a & 1);   //取出最低位
        a >>= 1;        //将被取出的最低位移出
    }


   优点:直接采用位运算,比通过计算产生二进制的方法速度快

 

将float类型的内存二进制字符输出

    float b = 20.59375;
    void *c = &b; //void 指针指向变量

    //直接对void*变量进行操作
    //原理:由于float不具备位操作功能,所以转化int进行操作,而采用int = (int)float的方式强转会改变真实float内存中二进制序列

    //所以采用void指针指向内存,在通过void指针以原float二进制内存序列转换为int再进行取位操作

    for (int i = 0; i < 32; i ++)
    {
        cout << (*(int *)(c) & 1);
        *(int *)(c) >>= 1;
    }
 


将二进制序列转换为float值

    //binArry字符数组中已有二进制序列,0-31由地位到高位排列,tmpInt变量为unsigned int型

    //以int形式将二进制数组转化为内存中的二进制

    for (i = 0; i < 32; i ++)
    {
        tmpInt += binArry[i] * (int)pow(2, i);
        //tmpInt += pow(2, binArry[i]);
    }

    //由于此时的tmpInt变量中的二进制序列已经与我们需要的float数值的二进制序列相同,所以再次采用void指针强转为float
  //cout << tmpInt;
    void *p = &tmpInt;
    cout << *(float *)p;


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值