利用位运算将整型值的二进制位模式从左到右变换
目标:
编写函数unsigned int reverse_bits( unsigned int value );
此函数的返回值是把value的二进制位模式从左到右变换一下的值。
例如,在32位机器上,25这个值包括下列各位:
00000000000000000000000000011001
函数的返回值应为2550136832,它的二进制位模式为:
10011000000000000000000000000000
编写的函数应不依赖于不同机器上整型值的长度
思路:
设answer为所求值,初值为0
判断value的最后一位是否为1,若为1,answer的最后一位变为1
value不断进行右移位
利用一个位在一个无符号整形中进行移位来控制循环,answer跟随此位进行左移以达到不依赖于不同机器上整型值的长度
代码:
unsigned int reverse_bits( unsigned int value )
{
unsigned int answer;
unsigned int i;
answer=0;
/*只要i不是0就继续进行,使循环与机器的字长无关,
**从而避免了可移植性问题*/
for( i=1;i!=0;i<<=1 )
{
answer<<=1;
if( value&1 )
answer|=1;
value>>=1;
}
return answer;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153886.html