求二進位制數中1的個數

2021-06-22 19:32:01 字數 747 閱讀 1133

主要介紹兩種方法。

快速法

運算次數只與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...