1、问题 :
把一个32位的数按位反转,就是第32位转到第1位,第31位转到第2位…………
什么样的算法最节省效率?
2、解答 :http://www.yuanma.org/data/2007/0723/article_2763.htm
un
signed int bit_reverse( unsigned int n)
{
n = ( ( n > > 1) & 0x55555555) | ( ( n < < 1) & 0xaaaaaaaa) ;
n = ( ( n > > 2) & 0x33333333) | ( ( n < < 2) & 0xcccccccc) ;
n = ( ( n > > 4) & 0x0f0f0f0f) | ( ( n < < 4) & 0xf0f0f0f0) ;
n = ( ( n > > 8) & 0x00ff00ff) | ( ( n < < 8) & 0xff00ff00) ;
n = ( ( n > > 16) & 0x0000ffff) | ( ( n < < 16) & 0xffff0000) ;
return n;
}
第一行代码为奇偶位相互交换;第二行为以两位为一单元,奇偶单元进行交换;第三行为以四位为一单元,奇偶单元进行交换;第四行为以八位为一单元,奇偶单元进行交换;最后一行为以十六位为一单元,奇偶单元进行交换。至此,32位反转完成,算法结束。
3、演绎: http://blog.csdn.net/sailor_8318/archive/2007/08/29/1764477.aspx
上述奇偶、 2 、 4 、 8 、 16 的交换方法可以演变有 四种实现形式,本质一样 ,可以都先移后取、都先取后移以及一个先移后取、另一个先取后移