下面的代码写的太罗嗦了,请参考 对一个整数按位反转
void Fan1()
{
unsigned int Number;
unsigned int Temp1,Temp2,Temp3;
int i = 31;
Temp1 = 0xaaaaaaaa;
Temp2 = 1;
Temp3 = 0;
Number = 0;
printf("Number = 0x%x/n",Temp1);
for(i=31;i > 0; i-=2)
{
Number = Number | ( (Temp1 & Temp2) << i );
Temp2 = Temp2 <<1;
}
Temp2 = 0x80000000;
for(i=31;i > 0; i-=2)
{
Number = Number | ( (Temp1 & Temp2) >> i );
Temp2 = Temp2 >>1;
}
printf("Number = 0x%x/n",Number);
}
从网上发现了另外的一种方法,很是不错,先帖在这儿了。
void Fan3()
{
unsigned int x = 0xAAAAAAAA;
x = (x & 0x55555555) << 1 | (x & 0xaaaaaaaa) >> 1;
x = (x & 0x33333333) << 2 | (x & 0xcccccccc) >> 2;
x = (x & 0x0f0f0f0f) << 4 | (x & 0xf0f0f0f0) >> 4;
x = (x & 0x00ff00ff) << 8 | (x & 0xff00ff00) >> 8;
x = (x & 0x0000ffff) << 16 | (x & 0xffff0000) >> 16;
printf("Number = 0x%x/n",x);
}