码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-07-18 21:50:28      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:method   整数   long   计算机基础知识   面试题   原来   cout   class   while   

这个题目考察的是计算机基础知识。注意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的个数

标签:method   整数   long   计算机基础知识   面试题   原来   cout   class   while   

原文地址:https://www.cnblogs.com/flyingrun/p/13336887.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!