x = x & (x - 1)的意義:
我們知道 & 爲 按位與 運算符,有如下性質:
1 & 1 == 1
1 & 0 == 0
0 & 1 == 0
0 & 0 == 0
x & (x - 1)就是將二進制x的最後一個1置爲0,如2015的二進制爲11111011111,則進行一次 x & (x - 1) 運算後x的值變爲11111011110,可以手動模擬一下,很簡單,所以配合這個我們在設置一個計數器count,初始爲0,外面套一個while循環,循環條件爲x不爲0,就可以計算x的二進制中1的個數,程序如下:
#include "stdafx.h"
#include<iostream>
using namespace std;
int func(int x)
{
int count = 0;
while (x)
{
count++;
x = x&(x - 1);
}
return count;
}
int main()
{
cout << func(2015) << endl;
return 0;
}
這是京東的一道筆試題。