Jan 18, 2009

Reverse bit within a 32 bit integer

Reverse bit within a 32 bit integer
Int Foo(int a)
{
Unsigned int b=0x1;
Unsigned int c=0x80000000;
While(b < c)
{
If((!(a&b)&&(a&c))||((a&b)&&!(a&c)))
{a=aXORb; a=aXORc;}
b<<=1;
c>>=1;
}
Return a;
}
Or
assume 32-bit number
m = 0x55555555; // 1-bit swap
x = ((x & m) << 1) | ((x & ~m) >> 1);
m = 0x33333333; // 2-bits swap
x = ((x & m) << 2) | ((x & ~m) >> 2);
m = 0x0f0f0f0f; // 4-bits swap
x = ((x & m) << 4) | ((x & ~m) >> 4);
m = 0x00ff00ff; // 8-bits swap
x = ((x & m) << 8) | ((x & ~m) >> 8);
x = (x << 16) | (x >> 16); // 16-bits swap
or use a look up table

No comments:

Post a Comment