主要介紹兩種方法。
快速法
運算次數只與n中1的個數有關。如果n的二進位制表示中有k個1,那麼這個方法只需要迴圈k次即可。其原理是不斷清除n的二進位制表示中最右邊的1,同時累加計數器,直至n為0,**如下
int bitcount2(unsigned int n)
return c ;
}
查表法
由於表示在程式執行時動態建立的,所以速度上肯定會慢一些,把這個版本放在這裡,有兩個原因
1. 介紹填表的方法,因為這個方法的確很巧妙。
2. 型別轉換,這裡不能使用傳統的強制轉換,而是先取位址再轉換成對應的指標型別。也是常用的型別轉換方法。
int bitcount3(unsigned int n) ;
// 初始化表
for (int i =0; i <256; i++)
unsigned int c =0 ;
// 查表
unsigned char* p = (unsigned char*) &n ;
c = bitssettable256[p[0]] +
bitssettable256[p[1]] +
bitssettable256[p[2]] +
bitssettable256[p[3]];
return c ;
}
**
求二進位制數中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...