将无符号整形每一位都翻转过来

最近笔试的时候碰到了这样的题目,但是不会做,回来查了一下书之后,其实现与君共享。

如  00000000 00000000 00000000 00000011  反置后为

     11000000 00000000 00000000 00000000  

不需要通过循环

unsigned rev(unsigned x)

{

x=(x & 0x55555555) <<1 | (x & 0xAAAAAAAA) >> 1;

x=(x & 0x33333333) <<2 | (x & 0xCCCCCCCC) >> 2;

x=(x & 0x0F0F0F0F) <<4 | (x & 0x0F0F0F0F) >> 4;

x=(x & 0x00FF00FF) <<8 | (x & 0xFF00FF00) >> 8;

x=(x & 0x0000FFFF) <<16 | (x & 0xFFFF0000) >> 16;

return x;

}

点赞