如何实现字节内的逆序
发布于:2014-03-17 18:43:45 作者:兄弟网络
点击:次
unsigned rev(unsigned X)
{
X=(X&0x55)<<1 | (X&0xAA)>>1;
X=(X&0x33)<<2 | (X&0xCC)>>2;
X=(X&0x0F)<<4 | (X&0xF0)>>4;
return X;
}
假设X是8位的ABCDEFGH;
X&0x55 得到 0B0D0F0H,左移一位得到B0D0F0H0;
X&0xAA 得到 A0C0E0G0,右移一位得到0A0C0E0G;
相与得到BADCFEHG;
X&0x33 得到 00DC00HG,左移两位得到DC00HG00
X&0xCC 得到 BA00FE00,右移两位得到00BA00FE
相与得到DCBAHGFE
X&0x0F 得到0000HGFE,左移四位得到HGFE0000
X&0xF0 得到DCBA0000,右移思维得到0000DCBA
相与得到
HGFEDCBA(搞定)
这个方法的复杂度是O(logn)
还有一个O(1)的方法:把所有的8位的数的逆序都求出来,软件开发,
存放到一个数组去,网站SEO,如果需要就可以直接提取。