自学新手:二进制位反置函数,请大虾指点。
程序代码:#include <stdio.h>
unsigned reverse_bits(unsigned ); //反值二进制位函数
void btostr(unsigned ); //数值的二进制以字符串形式排列,并显示。
int main(void)
{
unsigned a=25;
btostr(a);
printf("reverse value is %u\n",reverse_bits(a));
printf("and now a is %u",a);
return 0;
}
unsigned reverse_bits(unsigned v)
{
unsigned a=0;
signed int t=1,i=0;
while(t>0) //求int型数的bit位数
{
t<<=8;
i+=8;
}
printf("i=%d\n",i); //查看bit位数
while(v!=0)
{
a=a|((v&1u)<<--i); //最后一位前移bit位减1位
v>>=1; //次一位前移bit位减2位
puts("Now a is:");
btostr(a);
puts("Now v is:");
btostr(v);
}
return a;
}
void btostr(unsigned v)
{
int i=32;
char str[33];
str[32]='\0';
while(i>0)
{
str[--i]=v&1?'1':'0';
v>>=1;
}
i=0;
while(str[i])
{
printf("%c",str[i++]);
if(i%4==0)
putchar(' ');
}
putchar('\n');
}






