詳解經典面試題 x x x 1

2021-07-28 04:47:26 字數 626 閱讀 4694

下面這段**都很熟悉吧?經典面試題目了。

#include 

using namespace std;

int func(int x)

return count;

} int main()

答案解釋是:func函式返回形參x轉化成二進位制後包含1的數量。

開始我不是很理解,為什麼func函式能計算x包含1的數量?

其實是這樣:

對於任意的x,

轉換成二進位制後,是形如這樣的數字:aa...aa10...00,從右向左數有任意多個0,直到遇見第乙個1,字母a用來佔位,代表1左邊的任意數字。

x-1轉換成二進位制後,是形如這樣的數字:aa...aa01...11,從右向左數,原來的任意多個0都變成1,原來的第乙個1,變成0,字母a部分不變。

對x 和 x-1 進行 按位與 計算,會得到:aa...aa00...00,從右向左數,原來的第乙個1變成了0,字母a部分不變。

所以 x & (x-1)相當於消除了 x 從右向左數遇到的第乙個1。

那麼,x轉換成二進位制後包含多少個1,func函式裡的迴圈就會進行多少次,直到x所有的1都被「消除」。

這回明白了吧?

經典面試題(1)

要求 1.不能使用庫函式 2.只能開闢有限個空間 空間個數和字串的長度無關 演算法思路 先將字元陣列 student a am i 逆置變為 i ma a tneduts 然後在將字元陣列 i ma a tneduts 裡邊的每乙個單詞逆置變為 i am a student 如下 define cr...

HTTP協議 詳解 經典面試題

http請求由三部分組成,分別是 請求行 訊息報頭 請求正文 http 超文字傳輸協議 是乙個基於請求與響應模式的 無狀態的 應用層的協議,常基於tcp的連線方式,http1.1版本中給出一種持續連線的機制,絕大多數的web開發,都是構建在http協議之上的web應用。1 常用的http方法有哪些?...

HTTP協議 詳解 經典面試題

http請求由三部分組成,分別是 請求行 訊息報頭 請求正文 http 超文字傳輸協議 是乙個基於請求與響應模式的 無狀態的 應用層的協議,常基於tcp的連線方式,http1.1版本中給出一種持續連線的機制,絕大多數的web開發,都是構建在http協議之上的web應用。1 常用的http方法有哪些?...