首页 > 其他 > 详细

一个整数的二进制表示中有多少个1

时间:2016-07-23 11:42:11      阅读:251      评论:0      收藏:0      [点我收藏+]

题目:

一个整数存储在内存中,输出它的二进制表示中1的个数

思路:

要判断这个整数的二进制表示中1的个数,联想到这是[位运算]的题目。

最先想到巧妙利用[1]这个数,[1]只有最右一位是1,其他位均为0;

所以,接下来应该想到,用“1”和这个整数做[与运算],首先可以判断最右边一位是不是1,以此类推,该整数每右移一位,和1做与运算,直到该整数变为0.至此,问题思路已有,但是考虑非正常数字,比如[负数],该方法就不适用,因为负数二进制需要保持最高位一直为1,最后会陷入死循环(OXffffffff)前面的思路中,两个数与运算,那能否让[1]进行左移位,而原整数不动,这样可以判断次高位是否为1.以此[1]继续左移.

还有一种思路,一个不为0的整数i,至少有一位为1,做这样的操作:

i-1 得到的结果是  整数i的最右边一位1的右边所有原来为0的位都变为1,1这一位变为0,即减1后最右边1之后的所有位都取反了;然后把它和i做与运算,结果是将最右边一位1之后的所有位都变为0了,所以,反复这样的步骤,做多少次减1的操作,i的二进制表示就有多少个1,直到多次减1后i变为0.

 

另:清除最右边一位为0 的方法:

i=i*(i-1)

一个整数的二进制表示中有多少个1

原文:http://www.cnblogs.com/newcoder/p/5698030.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!