x = x & (x - 1)的意義:
我們知道 & 為 按位與 運算子,有如下性質:
1 & 1 == 1
1 & 0 == 0
0 & 1 == 0
0 & 0 == 0x & (x - 1)就是將二進位制x的最後乙個1置為0,如2015的二進位制為11111011111,則進行一次 x & (x - 1) 運算後x的值變為11111011110,可以手動模擬一下,很簡單,所以配合這個我們在設定乙個計數器count,初始為0,外面套乙個while迴圈,迴圈條件為x不為0,就可以計算x的二進位制中1的個數,程式如下:
#include "stdafx.h"
#includeusing namespace std;
int func(int x)
return count;
}int main()
這是京東的一道筆試題。
q: 把乙個int型的數的二進位制的最右邊那個1找出來(小技巧)
public
static
intfindrightone
(int n)
按位與 按位異或 按位取反
按位與 按位或 按位異或 1.按位與運算 按位與運算子 是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 否則為0。參與運算的數以補碼方式出現。例如 9 5可寫算式如下 00001001 9的二進位制補碼 00000101 5的二進位制補碼 0000...
詳解「 按位與 按位或 按位異或」
按位與 按位或 按位異或 1.按位與運算 按位與運算子 是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 否則為0。參與運算的數以補碼方式出現。例如 9 5可寫算式如下 00001001 9的二進位制補碼 00000101 5的二進位制補碼 0000...
按位與 按位異或 按位取反 分析
按位與 按位或 按位異或 1.按位與運算 按位與運算子 是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 否則為0。參與運算的數以補碼方式出現。例如 9 5可寫算式如下 00001001 9的二進位制補碼 00000101 5的二進位制補碼 0000...