q:對於乙個位元組(8bit)的無符號整型變數,求其二進位製表中「1」的個數,要求演算法的執行效率盡可能高。
解法1對於二進位制操作,對乙個二進位制數除以乙個2,原來的數字會減少乙個0。如果除的結果中有餘,那麼就表示當前位置有乙個1。
int count(byte v)
v = v/2;
}return num;
}
解法2向右的移位操作同樣可以達到相除的目的。
對於判斷移位之後是否有1存在,可以把這個數與00000001進行「與」操作,如果結果為1,則表示當前8位數的最後一位為1,否則為0。
解法3int count(byte v)
return num;
}
上面兩種解法都是遍歷了數字的每一位,所以它的時間複雜度為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...