面試題15:二進位制中1的個數
阿新 • • 發佈:2020-07-18
這個題目考察的是計算機基礎知識。注意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。很多二進位制的問題都可以用這種思路解決。