题目描述:
题目要求是:unsigned int reverse_bits(unsigned int value);这个函数的返回值是把value的二进制位模式从左到右变换一下后的值。例如,在32位机器上,25这个值包含下列各个位:
00000000 00000000 00000000 00011001
函数的返回值应该是2 550 136 832,它的二进制位模式是:
10011000 00000000 00000000 00000000
要求是:不能让函数依赖于机器上整型数值的长度。
答案代码以及解释:就是说我们无法知道unsigned int的长度
unsigned int
reverse_bits(unsigned int value)
{
unsigned int answer;
unsigned int i;
answer = 0;
/*把一个unsigned int 数字1一直左移,直到它变成全0的时候,也就得到了该机器内unsigned int的长度*///也可以使用sizeof(unsigned int)来得到unsigned int的长度
for (i = 1; i != 0; i <<= 1)
{
answer <<= 1;
if (value & 1) { answer |= 1; }
value >>= 1;
}
return answer;
}