程式設計之美 求二進位制數中1的個數

2022-04-08 02:59:03 字數 673 閱讀 6895

文中講了五種方法:

1. 迴圈利用除法和模運算。該方法最容易想到。可謂沒有技術含量的。

2. 迴圈利用位移和按位與。用位操作代替算術運算,提高效率。

3. 只考慮數字中的1。有經驗規律知:對於2的方冪n與n-1取與為0.因而,可以利用該規律想法怎麼把原數字變為0,經過的步數就是1的個數。如果沒有相應的經驗或常識,該方法不容易想到。

4. 利用分支操作。該方法速度並不快。但提供了乙個思路:利用空間換時間。

5. 查表法。把1到255的情況羅列到乙個陣列內,然後通過查表一次就能得到結果。如果有了空間換時間的思想,這個方法是容易想到的。

該問題的兩個習題解答:

1.對於32位數,我會選擇查表法與只考慮數字中的1的方法。把兩種方法結合。

演算法的主體**如下:

int count(int v)

return num;

}注:該方法可以擴充套件為處理任意位數的變數,其中count為變數的位數,**改變如下:

int count(int v, int count)

return num;

}2. 把a變成b需要改變多少位?這個問題我是看的別人的答案。意思是問題轉化成找出a和b不同的位數。而a和b不同的位數可以用異或運算得到。這樣就轉化成求乙個數中1的個數的問題,即本文的提出的問題上了。通過這個問題,使我想到做學問一定要心靜,寧靜致遠啊!

求二進位制數中1的個數 《程式設計之美》

求二進位制中1的個數。對於乙個位元組 8bit 的變數,求其二進位制表示中 1 的個數,要求演算法的執行效率盡可能的高。先來看看樣章上給出的幾個演算法 解法一 每次除二,看是否為奇數,是的話就累計加一,最後這個結果就是二進位制表示中1的個數。解法二 同樣用到乙個迴圈,只是裡面的操作用位移操作簡化了。...

程式設計之美 求二進位制數中1的個數

題目 對於乙個位元組的無符號整型變數,求其二進位制表示中 1 的個數,要求演算法的執行效率盡可能高。題目很簡單,一般人都可以用最直接的方法求解出來,通過求餘和模除運算。對二進位制操作過程中,除以乙個2,原來的數就會少乙個0,如果除過程中余1,則表示當前位置有乙個1,計數值加1,很簡單。但從執行效率來...

《程式設計之美》 求二進位制數中1的個數

問題 求乙個位元組 8bit 的無符號整型變數二進位制表示中 1 的個數。要求執行效率盡可能高。分析與解法 解法一 每次除2取餘,若為奇數則累加,最終累加結果為 1 的個數。如,10100010除以2,商為1010001,餘數為0 1010001除以2,商為101000,餘數為1。時間複雜度o lo...