二进制翻转
1 要求
请编写函数
unsigned int reverse_bits(unsigned int value);
这个函数的返回值是把value的二进制位模式从左到右变换一下后的值。例如:在32位机器上,25这个值包含下列各个位:
00000000000000000000000000011001
函数的返回值应该是2550136832,它的二进制位模式是:
10011000000000000000000000000000
2 分析
为了考虑移植性的问题,unsigned int 的位长度可以通过计算得到比如sizeof(unsignedint)*8,或者将for写成for(unsigned int i=1;i!=0;i<<=1),这样for循环的次数就能限制住了。本题可以通过循环的测试value的最低位值,然后不断右移,从而遍历value的bits。
3 题解
unsigned int reverse_bits( unsigned int value ) { unsigned int result=0; unsigned int i=0; for(i=1;i!=0;i<<=1) { result<<=1; if(value&1) reuslt|=1; value>>=1; } return result; }