程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c語言中統計二進制位中1的個數的算法優化

c語言中統計二進制位中1的個數的算法優化

編輯:關於C語言

c語言中統計二進制位中1的個數的算法優化


統計整數二進制位中1的個數的辦法:  
int one(int m)

{

 int count = 0;

 while (m != 0)

 {

  if (m % 2 == 1)   //進行模2除2一位一位的統計

  {

   count++;

  }

  m /= 2;

 }

}

 

或者下面這種位於運算的
int two(int m)
{
 int count = 0;
 while (m != 0)    
 {
  count += m & 1;    //進行位於運算統計1的個數原理和上面的一樣但是更安全
  m >>= 1;
 }
 return count;
}

 

但是這兩種算法都不能避免的要對二進制位中的0進行判斷或者計算,又沒有只與二進制序列中1有關的算法呢?        下面的這種算法就實現了這樣的想法:  
int three(int m)

{

 int count = 0;

 while (m != 0)

 {

  count++;

  m &= m - 1;  //位於本身減1的數可以每次去掉一個1

 }

 return count;

}

 

  當然第三種算法是最高效的,不過應該還有更為有效的方法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved