zoukankan      html  css  js  c++  java
  • 二进制高低位逆转

    编写一个函数,实现将一个32位int 型数据的二进制高位到低位的逆变,例如:1101 0101 变成 1010 1011 。

    例举两种方法:

    方法1. 再定义一个变量,通过移位运算和位与将高位到低位实现逆序。但不足之处是效率低,需要进行332次移位和运算。

    int func1(unsigned int uiData,int length)

        unsigned int uiValue = 0;
        int i = 0;
        for(i=0;i<length;i++)
        {
            uiValue = (uiValue << 1)+(uiData & 0x01);
            uiData = uiData >> 1;
        }    
        return uiValue;
    }

    方法2.采用分治的思想

    int func2(unsigned int uiData)

        unsigned int uiValue = 0;
        /* 分而治之的思想 */
        /* 高16位和低16位互换 */
        uiValue = ((uiData >> 16) & 0x0000ffff) |
                  ((uiData << 16) & 0xffff0000);
        /* 16位中的高低8位互换 */
        uiValue = ((uiData >> 8) & 0x00ff00ff) |
                  ((uiData << 8) & 0xff00ff00);
        /* 8位中的高低4位互换 */
        uiValue = ((uiData >> 4) & 0x0f0f0f0f) |
                  ((uiData << 4)& 0xf0f0f0f0);
        /* 4位中的高低2位互换 */
        uiValue = ((uiData >> 2) & 0x33333333) |
                  ((uiData << 2) & 0xcccccccc);
        return uiValue;
    }

    这个程序中需要位操作8次就能实现高低位的逆序。

  • 相关阅读:
    二叉排序树
    C# 大端与小端
    【转】C#socket通信
    【转】Github 搜索技巧,快速找到好资源
    web api 跨域请求,ajax跨域调用webapi
    【转】Linux简介及最常用命令
    【转】带你吃透RTMP
    09-vuex基本应用之计数demo
    08-配置vue路由的步骤
    02-原型与原型链
  • 原文地址:https://www.cnblogs.com/zhanbiqiang/p/4109365.html
Copyright © 2011-2022 走看看