第二十八題(整數的二進位制表示中1的個數)

2021-09-30 11:07:56 字數 684 閱讀 8863

28.整數的二進位制表示中1的個數

題目:輸入乙個整數,求該整數的二進位制表達中有多少個1。

例如輸入10,由於其二進位制表示為1010,有兩個1,因此輸出2。

這道題的另外乙個變種是:求兩個整數二進位制表示形式中有多少個位上的資料不同。其實對這兩個整數進行異或運算就可以轉換成本題,最終還是求乙個異或得到的整數二進位制表示形式中1的個數。

這裡提供兩種思路

1:直接計數

考慮到輸入的整數可能為負數,直接對其進行向右移位操作時,會將最高位符號位移入到低位,所以採用(1<

2.number&= number-1

這是一種很經典的位運算計較,可以將number中最低位的1變為0,重複執行該運算直到number為零,執行該運算的次數即為number中1的個數。

在整數中1個數較少的情況下,比思路1中迴圈計數的方法效率要很高。

**:

#include "stdafx.h"

#includeusing namespace std;

namespace ms100p_28

int countonesofintiger2(int number)

return count;

} void test() }

int _tmain(int argc, _tchar* ar**)

整數的二進位制表示

目錄總結 整數的二進位制表示,需要區分正整數和負整數來看。看正整數的二進位制表示,就要先了解一下位權。十進位制 二進位制都有位權。以 123 為例 123 1 10 2 2 10 1 3 10 0。每個位置的位權都不一樣,十進位制從右到左,以 1 開始,依次乘 10 也就是說第 1 位為 1 第 2...

整數二進位制表示中1的個數

出自 題目 輸入乙個整數,求該整數的二進位制表達中有多少個1。例如輸入10,由於其二進位制表示為1010,有兩個1,因此輸出2。分析 這是一道很基本的考查位運算的面試題。包括微軟在內的很多公司都曾採用過這道題。乙個很基本的想法是,我們先判斷整數的最右邊一位是不是1。接著把整數右移一位,原來處於右邊第...

整數的二進位制表示中1的個數

給出通常能想到的方式,這兩種方式在 c和指標 一書中給出。以下討論的均為非負整數。該方法每次在迴圈中判斷數的二進位制最右一位是否為1 如果該數能不能被2整除 每次迴圈後該數右移一位。因此遍歷了數的二進位制表示的每一位。int count one bits1 int value 與上邊方法類似,也是每...