问题重述:将一个数字的二进制表示前后倒置,例如1001 1100被倒置为0011 1001。
典型应用:FFT变换。
算法:采用分治的方法,将前后一半互换,那么问题就变成为如何分别对前后两部分倒置的问题。当问题缩小到只有两个位的时候,直接交换即可。
只对一个字节的数值进行倒置的程序示例:
void Reverse(char & x)
{
x = (x & 0x0F) << 4 + (x & 0xF0) >> 4;
x = (x & 0x33) << 2 + (x & 0xCC) >> 2;
x = (x & 0x55) << 1 + (x & 0xAA) >> 1;
}