面试题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的个数的主要内容,如果未能解决你的问题,请参考以下文章