按位與的小應用

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;
}

這是京東的一道筆試題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章