二進位制中1的個數
統計二進位制中1的個數可以直接移位再判斷,當然像《程式設計之美》書中用迴圈移位計數或先打乙個表再計算都可以。本文詳細講解一種高效的方法。以34520為例,可以通過下面四步來計算其二進位制中1的個數二進位制中1的個數。
第一步:每2位為一組,組內高低位相加
10 00 01 10 11 01 10 00
-->01 00 01 01 10 01 01 00
第二步:每4位為一組,組內高低位相加
0100 0101 1001 0100
-->0001 0010 0011 0001
第三步:每8位為一組,組內高低位相加
00010010 00110001
-->00000011 00000100
第四步:每16位為一組,組內高低位相加
00000011 00000100
-->00000000 00000111
這樣最後得到的00000000 00000111即7即34520二進位制中1的個數。類似上文中對二進位制逆序的做法不難實現第一步的**:
x = ((x & 0xaaaa) >> 1) + (x & 0x5555);
好的,有了第一步,後面幾步就請讀者完成下吧,先動動筆再看下面的完整**:
[cpp]view plain
copy
print?
//二進位制中1的個數 by morewindows( )
#include
template
void printfbinary(t a)
putchar('\n');
} int main()
//二進位制中1的個數 by morewindows( )
#include template void printfbinary(t a)
putchar('\n');
}int main()
執行結果如下:
可以發現巧妙運用分組處理確實是解決很多二進位制問題的靈丹妙藥。
二進位制 二進位制中1的個數
題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。示例 1 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 0000000...
二進位制中1的個數 二進位制中0的個數
1 題目 實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數,例如把9表示成二進位制是1001,有2位是1。因此如果輸入9,該函式輸出2。2 解法 解法 一 可能會引起死迴圈的解法 基本思路 先判斷整數二進位制表示中最右邊一位是不是1。接著把輸入的整數右移一位,此時原理處於從右邊數起的第二位...
二進位制中1的個數
這種方法速度比較快,其運算次數與輸入n的大小無關,只與n中1的個數有關。如果n的二進位制表示中有k個1,那麼這個方法只需要迴圈k次即可。其原理是不斷清除n的二進位制表示中最右邊的1或者最左邊的1,同時累加計數器,直至n為0 如7 0111 通過與 7 1 0110 與操作消去最最左邊的1,並累加計數...