面試題 二進位制

2021-07-11 18:02:35 字數 1378 閱讀 1758

之前論壇看到乙個面試題,很基礎的考察按位符運算,總結如下:

& 按位與

只有對應的兩個二進位均為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 所以每個瓶子的...