利用位运算将整型值的二进制位模式从左到右变换

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。利用位运算将整型值的二进制位模式从左到右变换,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

利用位运算将整型值的二进制位模式从左到右变换

目标
编写函数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

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!