二进制中1的个数-剑指Offer


二进制中1的个数


题目描述


输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。


思路


  1. 若右移整数,需要考虑是否正负数,所以用一个1来左移,来依次和每位与运算
  2. 还有一种解法比较巧妙,因为第一个解法的整数有多少位就比较多少位,这个解法可以实现有多少1就比较多少次

代码


解法一:


public class Solution {
	public int  NumberOf1(int n) {
        int flag = 1;
        int count = 0;
        while(flag != 0) {
        	if ((n & flag) != 0) {
        		count++;
        	}
        	flag = flag << 1;
        }
        return count;
     }
}

解法二:


public int NumberOf(int n) {
        int count = 0;
        while (n != 0) {
            count++;
            n = (n - 1) & n;
        }
        return count;
    }
 
posted @ 2016-06-23 14:52  RosenDing  阅读(159)  评论(0编辑  收藏  举报