首页 > 代码库 > 二进制高低位逆转
二进制高低位逆转
编写一个函数,实现将一个32位int 型数据的二进制高位到低位的逆变,例如:1101 0101 变成 1010 1011 。
例举两种方法:
方法1. 再定义一个变量,通过移位运算和位与将高位到低位实现逆序。但不足之处是效率低,需要进行332次移位和运算。
int func1(unsigned int uiData,int length)
{
unsigned int uiValue = http://www.mamicode.com/0;
int i = 0;
for(i=0;i<length;i++)
{
uiValue = http://www.mamicode.com/(uiValue << 1)+(uiData & 0x01);
uiData = http://www.mamicode.com/uiData >> 1;
}
return uiValue;
}
方法2.采用分治的思想
int func2(unsigned int uiData)
{
unsigned int uiValue = http://www.mamicode.com/0;
/* 分而治之的思想 */
/* 高16位和低16位互换 */
uiValue = http://www.mamicode.com/((uiData >> 16) & 0x0000ffff) | /
((uiData << 16) & 0xffff0000);
/* 16位中的高低8位互换 */
uiValue = http://www.mamicode.com/((uiData >> 8) & 0x00ff00ff) | /
((uiData << 8) & 0xff00ff00);
/* 8位中的高低4位互换 */
uiValue = http://www.mamicode.com/((uiData >> 4) & 0x0f0f0f0f) | /
((uiData << 4)& 0xf0f0f0f0);
/* 4位中的高低2位互换 */
uiValue = http://www.mamicode.com/((uiData >> 2) & 0x33333333) | /
((uiData << 2) & 0xcccccccc);
return uiValue;
}
这个程序中需要位操作8次就能实现高低位的逆序。
二进制高低位逆转