求二進位制數中1的個數

2021-08-03 05:56:08 字數 675 閱讀 3786

q:對於乙個位元組(8bit)的無符號整型變數,求其二進位製表中「1」的個數,要求演算法的執行效率盡可能高。

解法1對於二進位制操作,對乙個二進位制數除以乙個2,原來的數字會減少乙個0。如果除的結果中有餘,那麼就表示當前位置有乙個1。

int count(byte v)

v = v/2;

}return num;

}

解法2向右的移位操作同樣可以達到相除的目的。

對於判斷移位之後是否有1存在,可以把這個數與00000001進行「與」操作,如果結果為1,則表示當前8位數的最後一位為1,否則為0。

int count(byte v) 

return num;

}

解法3

上面兩種解法都是遍歷了數字的每一位,所以它的時間複雜度為o(l),其中l為二進位制數的長度,所以可以考慮讓演算法的複雜度只與1的個數有關。

考慮乙個比較簡單的情況,只有乙個1的情況。例如:01000000,如何判斷它裡面有多少個1呢?可以通過判斷這個數是否是2的整數次冪來實現,如果希望操作後的結果為0,01000000可以和00111111進行「與」操作。

int count(byte v) 

return num;

}

求二進位制數中1的個數

解法一 可以舉乙個八位的二進位制例子來進行分析。對於二進位制操作,我們知道,除以乙個2,原來的數字將會減少乙個0。如果除的過程中有餘,那麼就表示當前位置有乙個1。以10 100 010為例 第一次除以2時,商為1 010 001,余為0。第二次除以2時,商為101 000,余為1。因此,可以考慮利用...

求二進位制數中1的個數

對於乙個位元組 8bit 的變數,求其二進位制表示中 1 的個數,要求演算法的執行效率盡可能地高。解法一 可以舉乙個八位的二進位制例子來進行分析。對於二進位制操作,我們知道,除以乙個2,原來的數字將會減少乙個0。如果除的過程中有餘,那麼就表示當前位置有乙個1。int count int v int ...

求二進位制數中1的個數

對於乙個位元組 8bit 的無符號整型變數,求其二進位制表示中 1 的個數。c codes as below using system class program static void main string args program program new program for int i 0...