求二進位制中1的個數

2021-09-07 14:13:58 字數 975 閱讀 5667

如何快速的求乙個數二進位制表示時1的個數呢。

除了用n&(n-1)外,還可以用下面的這種方法。

1. 最開始把相鄰奇數字和偶數字相加

2. 然後相鄰4位相加,相鄰8為相加,相鄰16為的相加。得到最後1的個數。

這種做法的複雜度的是log(位數)

#include #include 

#include

using

namespace

std;

class

solution

sn =n;

unsigned tmp;

tmp = (0x55555555) &sn;

sn = tmp + ((sn & 0xaaaaaaaa) >> 1

);

//printf("%x\n", sn);

tmp = (0x33333333) &sn;

sn = tmp + ((sn & 0xcccccccc) >> 2

);

//printf("%x\n", sn);

tmp = (0x0f0f0f0f) &sn;

sn = tmp + ((sn & 0xf0f0f0f0) >> 4

);

//printf("%x\n", sn);

tmp = (0x00ff00ff) &sn;

sn = tmp + ((sn & 0xff00ff00) >> 8

);

//printf("%x\n", sn);

tmp = (0x0000ffff) &sn;

sn = tmp + ((sn & 0xffff0000) >> 16

);

//printf("%x\n", sn);

return

sn; }

};int

main()

求二進位制中1的個數

在 程式設計之美 一書中有一節提到如何求乙個位元組的無符號整型變數二進位制表示中中1的個數,主要提到了四種方法。下面簡單介紹一下 1.求餘法 在將十進位制數轉換為二進位制數時,採用除2取餘法。將每次除2得到的餘數儲存起來逆序輸出便是該十進位制整數的二進位制表示。因此可以採用這種方法去統計1的個數。i...

求二進位制中1的個數

解法有很多種 以乙個位元組無符號位元組變數作為例子 解法一 求餘法 在將十進位制數轉換為二進位制數時,採用除2取餘法。將每次除2得到的餘數儲存起來逆序輸出便是該十進位制整數的二進位制表示。因此可以採用這種方法去統計1的個數。public int count byte n return sum 解法二...

求二進位制中1的個數

這是乙個經常會在筆試和面試中遇到的題目,今天我做到了這個題目,就來分享一下我對這個題目的解決思路。首先拿到這個題目,我們的基本思路是 先判斷最後一位是否為1,接著把數字依次右移,判斷每一位是否為1,直到整數變為0為止。基於這個思路我們可以寫下如下的 int count int n n n 1 ret...