转自《C和指针》
在写程序时,对于整数类型的值,不同的机器有着不同的存储位数,比如对于int类型,有的机器是32位的,有的是16位的,这样就涉及了程序的移植性问题。
现有如下需求:请编写函数unsigned int reverse_bits(unsigned int value),函数返回值为把value的二进制位前后颠倒后的结果,例如在16位机器上,1的二进制形式为0000 0000 0000 0001,函数返回值为1000 0000 0000 0000,编写函数时要注意不要让其依赖机器的整型值长度,以增强程序的可移植性。
实现如下:
unsigned int reverse_bits(unsigned int value){
unsigned int result=0,i=1;
for(;i!=0;i<<=1){//通过i移位直至为0来确定循环的次数,不依赖机器的整型值长度
result<<=1;
if(value&1){
result|=1;
}
value>>=1;
}
return result;
}