微軟程式設計之美面試題 統計二進位制中1的個數

2021-10-13 10:32:52 字數 1460 閱讀 1601

方法一:

思路:迴圈進行以下操作,直到n被縮減為0:

1. 用該資料模2,檢測其是否能夠被2整除

2. 可以:則該資料對應二進位制位元位的最低位一定是0,否則是1,如果是1給計數加1

3. 如果n不等於0時,繼續1

intcount_one_bit

(int n)

return count;}

上述方法缺陷:進行了大量的取模以及除法運算,取模和除法運算的效率本來就比較低。

方法二思路:

乙個int型別的資料,對應的二進位制一共有32個位元位,可以採用位運算的方式一位一位的檢測,具體如下

intcount_one_bit

(unsigned

int n)

return count;}

方法二優點:用位操作代替取模和除法運算,效率稍微比較高

缺陷:不論是什麼資料,迴圈都要執行32次

方法三:

思路:採用相鄰的兩個資料進行按位與運算

舉例:9999:‭10

0111

0000

1111‬

第一次迴圈:n=

9999 n=n&

(n-1)=

9999

&9998

=9998

第二次迴圈:n=

9998 n=n&

(n-1)=

9998

&9997

=9996

第三次迴圈:n=

9996 n=n&

(n-1)=

9996

&9995

=9992

第四次迴圈:n=

9992 n=n&

(n-1)=

9992

&9991

=9984

第五次迴圈:n=

9984 n=n&

(n-1)=

9984

&9983

=9728

第六次迴圈:n=

9728 n=n&

(n-1)=

9728

&9727

=9216

第七次迴圈:n=

9216 n=n&

(n-1)=

9216

&9215

=8192

第八次迴圈:n=

8192 n=n&

(n-1)=

8192

&8191=0

可以觀察下:此種方式,資料的二進位制位元位中有幾個1,迴圈就迴圈幾次,而且中間採用了位運算,處理起來比較高效

面試題 二進位制

之前論壇看到乙個面試題,很基礎的考察按位符運算,總結如下 按位與 只有對應的兩個二進位均為1時 結果位才為 1,否則為0。舉例 比如9 5,其實就是1001 101 1,因此9 5 1 規律 二進位制中,與 1相 就保持原位,與 0相 就為 0int fun int nvalue return nc...

負二進位制的面試題

今天看到一篇關於面試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之間的任意數。又可以演變為 如何快速的從...