之前論壇看到乙個面試題,很基礎的考察按位符運算,總結如下:
& 按位與
只有對應的兩個二進位均為1時
,結果位才為
1,否則為0。
舉例:比如9&5,其實就是1001&101=1,因此9&5=1
規律:二進位制中,與
1相&就保持原位,與
0相&就為
0
int fun(int nvalue)
return ncount;
}
求解fun(9999);
**運算結果為8,
參考《程式設計之美》中「求二進位制數中1的個數」
n&(n-1)的作用: 將n的二進位制表示中的最低位為1的改為0
n為奇數(n的二進位制表示的末位為1):
n: ******xx1
n-1: ******xx0
n&(n1-): ******xx0
相當於去掉最右邊的乙個1。
n為偶數且不等於0(n的二進位制表示的末位為0):
n: ***xx1000
n-1: ***xx0111
n&(n1-): ***xx0000
也是相當於去掉最右邊的乙個1。
所以,上題程式函式是統計傳入的引數的二進位制表示中1的個數
如 9999的二進位制表示為: 0010 0111 0000 1111,共8個1.
對於n&(n-1)的應用有
1.求某乙個數的二進位制表示中1的個數
while (n >0 )
2.判斷某個數是否是2的方冪
n > 0 && ((n & (n - 1)) == 0 )
3. 計算n!的質因數2的個數
容易得出n!質因數2的個數 = [n / 2] + [n / 4] + [n / 8] + ....
下面通過乙個簡單的例子來推導一下過程:n = 10101(二進位制表示)
現在我們跟蹤最高位的1,不考慮其他位假定為0,
則在[n / 2] 01000
[n / 4] 00100
[n / 8] 00010
[n / 8] 00001
則所有相加等於01111 = 10000 - 1
由此推及其他位可得:(10101)!的質因數2的個數為10000 - 1 + 00100 - 1 + 00001 - 1 = 10101 - 3(二進位制表示中1的個數)
推及一般n!的質因數2的個數為n - (n二進位制表示中1的個數)
負二進位制的面試題
今天看到一篇關於面試atc的心得,呵呵,裡面提到了乙個負二進位制的題目 d m 也真夠能折騰的。1.如何用負二進位制表述十進位制等式5 3 8?原題 解 dcba 2 d 2 3 c 2 2 b 2 1 a 2 0 dec d 2 3 c 2 2 b 2 1 d dec 則 101 neg bin ...
筆試面試題 天平稱重與二進位制
有人曾問帳前卒一道題 至少需要多少個砝碼,才能稱出1 50g物體?這道題有兩個變種 1.至少需要多少砝碼 左物右碼 才能稱出1 50g物體?2.至少需要多少砝碼 砝碼可以放在任意一邊 才能稱出1 50g物體?第一問可以變為 至少多少個數字相加,可以表示1 50之間的任意數。又可以演變為 如何快速的從...
面試題 老鼠喝毒藥(二進位制編碼)
我們有很多瓶無色的液體,其中有一瓶是毒藥,其它都是蒸餾水,實驗的小白鼠喝了以後會在5分鐘後死亡,而喝到蒸餾水的小白鼠則一切正常。現在有5只小白鼠,請問一下,我們用這五隻小白鼠,5分鐘的時間,能夠檢測多少瓶液體的成分?從簡單的出發 先是2只小白鼠,則有 這種情況,喝字你可以認為是0或1 所以每個瓶子的...