整數二進位制中1的個數

2021-10-07 07:04:12 字數 1091 閱讀 2142

要統計乙個整數二進位制中1的個數,首先我們會想到最簡單的方法就是 % 2 再 / 2,然後判斷每一位是否為1。

但是,如果這是乙個很大的數,頻繁的除法運算效率不是很高。而位運算比乘除法效率高,所以我們就來用位運算解決這道題。

首先方法一,當num大於0時,判斷num & 1 的值,即可知道最後一位的值,迴圈每次num右移一位,即可完成目標。

然後方法二,num & 0x55555555 + ((num >> 1) & 0x55555555) 5的二進位制為0101,按位與可以得到num的二進位制中相鄰兩位1的個數,例如:

98 二進位制為:0110 0010

0110 0010 & 0x55555555 == 0110 0010 & 0101 0101 0101 0101 0101 0101 0101 0101

得到: 0100 0000

(0110 0010 >>1) & 0x55555555 == 0011 0001 & 0101 0101 0101 0101 0101 0101 0101 0101

得到:0001 0001

相加得到: 0101 0001

此時我們已經統計到了相鄰兩位1的個數

0x33333333 == 0011 0011 0011 0011 0011 0011 0011 0011就是統計相鄰四位的1的個數

0x0f0f0f0f == 0000 1111 0000 1111 0000 1111 0000 1111就是統計相鄰八位的1的個數

直到 0xffff == 0000 0000 0000 0000 1111 1111 1111 1111 統計相鄰32位的1的個數,那麼在32位系統中,此時num的值就是乙個整數的二進位制1的個數。

#includeusing namespace std;

//查詢輸入整數的二進位制中1的個數

int findnumberof1(int num)

num >>= 1;

} return count;

*/}int main()

return 0;

}

整數二進位制中1的個數

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。如果是0,返回0 如果是正整數,除二取餘法 如果是負數 3.1 如果是 2147483648 int表示最大絕對值的負數 其補碼是1000 0000 0000 0000 0000 0000 0000 0000,故返回 1 3.2 其他...

二進位制 二進位制中1的個數

題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。示例 1 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 0000000...

二進位制中1的個數 二進位制中0的個數

1 題目 實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數,例如把9表示成二進位制是1001,有2位是1。因此如果輸入9,該函式輸出2。2 解法 解法 一 可能會引起死迴圈的解法 基本思路 先判斷整數二進位制表示中最右邊一位是不是1。接著把輸入的整數右移一位,此時原理處於從右邊數起的第二位...