看下上图的题,意思是把每个值的二进制位逆反取新值。笔者给出第一种答案,参考答案是另一种思路,参考答案更符合题意。
笔者的解题:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 32
unsigned int reverse_bits(unsigned int value);
int main(int argc, const char *argv[])
{
unsigned int sum;
sum = reverse_bits(atoi(argv[1]));
printf("%u\n",sum);
return 0;
}
unsigned int reverse_bits(unsigned int value){
unsigned int sum = 0;
unsigned int i;
unsigned int reverse_value;
for(i = 1; i < SIZE; i++){
reverse_value = ((value&1)<<(SIZE-i));
value>>=1;
sum += reverse_value;
}
return sum;
}
这种是普通思路,相对比较暴力,一个是size指定为32,可移植性比较差,另一个是每个位每次都要移动很多,效率思路相对不高。
参考答案的思路:
#include <stdio.h>
#include <stdlib.