1. 程式人生 > 實用技巧 >面試題15:二進位制中1的個數

面試題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。很多二進位制的問題都可以用這種思路解決。