国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

如何判斷一個整數的二進制中有多少個1

2020-01-26 16:05:13
字體:
來源:轉載
供稿:網友
復制代碼 代碼如下:

// 判斷一個整數的二進制位中有多少個1
void totalOne(int x)
{
 int count = 0;
 while(x)
 {
  x = x & ( x - 1 );
  count++;
 }
 printf("count = %d/n", count);
}

循環: x = x & ( x - 1 ); count++; 直到x為0為止。該方法的時間復雜度是O(m)
在此,不妨把x的二進制位表示為
          x=an-1an-2...a0。
按從低位到高位的順序,不失一般性,假設x的第i位為第一個為1的二進制位,即:ai=1。此時有:
          x       =an-1an-2...ai+1100...0              <1>
         (x-1)  =an-1an-2...ai+1011...1              <2>
很明顯,從式1和式2可以得出,在第一次 x & (x-1) 后:
          x=an-1an-2...ai+1000...0
之后重復同樣操作,直到x的二進制位中沒有1為止
從上面可以看出,每執行過一次 x & (x-1) 后,都會將x的二進制位中為1的最低位的值變為0,并記數加1。
目前而言,一個整數最大64bit,所有三種方法執行起來都可以認為是0(1)。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 西乌| 高邑县| 金寨县| 大兴区| SHOW| 阜康市| 永州市| 绩溪县| 中阳县| 乡宁县| 扶绥县| 天津市| 金寨县| 松阳县| 宜都市| 盐亭县| 精河县| 杭州市| 巫山县| 错那县| 贵德县| 秭归县| 武威市| 广南县| 夹江县| 太和县| 故城县| 定州市| 东辽县| 从化市| 郯城县| 远安县| 资中县| 梁平县| 江陵县| 莱芜市| 榆社县| 大庆市| 布尔津县| 色达县| 治多县|