1. 程式人生 > >獲取二進位制中1的個數

獲取二進位制中1的個數

方法一使用位移操作

 
int NumberOf1(int n)
{
    int count = 0;
    while(n){
        if(n & 1){
            count++;
        }
        n = n >> 1;
    }
    return count;   
}

這種解法是將資料n每次右移一位和1進行&運算來求得二進位制中1的個數,對於無符號數來說沒有問題,可是對於有符號數問題就大了,極有可能造成死迴圈。當n為負數時,n右移在最高位補1(為了保證資料為負數),因而最終就會形成死迴圈。可以改為

int NumberOf1(int n)
{
    int count = 0;
    int temp=1;
    for(int i=0;i<32;i++)
    {
        if(n & temp){
            count++;
        }
        temp = temp << 1;
    }
    return count;   
}

方法二,使用一個性質:把一個整數減去1之後再和原來的整數做按位與,得到的結果相當於是把整數的二進位制表示中最右邊的一個1變成0

int NumberOf1(int n)
{
    int count = 0;
    while(n){
        count++;  //只要n不為0則其至少有一個1
        n = n & (n - 1);
    }
    return count;
}