面试题15:二进制中1的个数

Posted flyingrun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题15:二进制中1的个数相关的知识,希望对你有一定的参考价值。

这个题目考察的是计算机基础知识。注意int型的-1在计算机中的二进制存储为补码0xFFFF FFFF,但是计算机在展示给我们的时候,是作为原码展示。

C++版

#include <iostream>
using namespace std;

int NumberOf1Plus(int n){
    int count = 0;
    unsigned int flag = 1;
    while(flag != 0 ){
        if(n & flag)
            count++;
        flag = flag << 1;
    }
    return count;
}

int main()
{
    cout << "Hello world!" << endl;
    cout<<NumberOf1(-2)<<endl;
    return 0;
}

Java版

package zr.offer;

public class Num_15 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(NumberOf1(-1));
		System.out.println(NumberOf1(9));
	}
	
	public static int NumberOf1(int n) {
		int count = 0;
		long flag = 1;
		for(int i = 1; i <= 32; i++) {
			if((n & flag) != 0) 
				count++;
			flag = flag << 1;
		}
		return count;
	}

}

??这个题目还有一种很新奇的解法。有如下思路:把一个整数减1之后再和原来的整数做位于运算,得到的结果相当于把整数的二进制表示中最右边的1变成0。很多二进制的问题都可以用这种思路解决。

以上是关于面试题15:二进制中1的个数的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode面试题15. 二进制中1的个数

LeetCode 面试题15. 二进制中1的个数

面试题15:二进制中 1 的个数

面试题15:二进制中1的个数

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

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