獲取二進位制中1的個數
阿新 • • 發佈:2018-11-21
方法一使用位移操作
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;
}