首页 > 其他 > 详细

二进制高低位逆转

时间:2014-11-19 23:37:54      阅读:566      评论:0      收藏:0      [点我收藏+]

编写一个函数,实现将一个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次就能实现高低位的逆序。

二进制高低位逆转

原文:http://www.cnblogs.com/zhanbiqiang/p/4109365.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!