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

二進制中1的個數

編輯:C++入門知識

 

\

 

方法一:判斷整數二進制表示中最右邊一位是否為1,接著把整數右移一位判斷倒數第二位是否為1,以此類推,直到整數變成0為止。

代碼:


[cpp]
#include "stdafx.h"  
#include <iostream>  
using namespace std; 
 
 int CountOf1(int n) 
 { 
    int nCount = 0; 
  
    while (n) 
    { 
        if (n & 1) 
        { 
            nCount++; 
        } 
  
        n = n >> 1; 
    } 
  
    return nCount; 
 } 
 
int _tmain(int argc, _TCHAR* argv[]) 

    cout << CountOf1(7) << endl; 
    system("pause"); 
    return 0; 

#include "stdafx.h"
#include <iostream>
using namespace std;

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

int _tmain(int argc, _TCHAR* argv[])
{
 cout << CountOf1(7) << endl;
    system("pause");
 return 0;
}

缺點:如果輸入的數為負數,若一直做右移運算,最終將陷入死循環。

 

 

方法二:為避免陷入死循環,可以不右移輸入的數字,先將輸入數字和1做與運算,判斷最低位是否為1,接著將1左移一位,判斷倒數第二位是否為1,以此類推。

代碼:


[cpp]
#include "stdafx.h"  
#include <iostream>  
using namespace std; 
 
 int CountOf1(int n) 
 { 
    int nCount = 0; 
    unsigned int flag = 1; 
    while (flag) 
    { 
        if (n & flag) 
        { 
            nCount++; 
        } 
  
        flag = flag << 1; 
    } 
  
    return nCount; 
 } 
 
int _tmain(int argc, _TCHAR* argv[]) 

    cout << CountOf1(7) << endl; 
    system("pause"); 
    return 0; 

#include "stdafx.h"
#include <iostream>
using namespace std;

 int CountOf1(int n)
 {
  int nCount = 0;
  unsigned int flag = 1;
  while (flag)
  {
   if (n & flag)
   {
    nCount++;
   }
 
   flag = flag << 1;
  }
 
  return nCount;
 }

int _tmain(int argc, _TCHAR* argv[])
{
 cout << CountOf1(7) << endl;
    system("pause");
 return 0;
}

缺點:循環次數等於整數二進制的位數,32為的整數需要循環32次。

 


方法三:把整數減去1,在和原整數做與運算,會把整數最右邊的一個1變成0,那麼一個整數的二進制表示中有多少個1,就可進行多少次這樣的操作。顯然可以減少循環次數。


代碼:


[cpp]
#include "stdafx.h"  
#include <iostream>  
using namespace std; 
 
int CountOf1(int n) 

    int nCount = 0; 
 
    while (n) 
    { 
        nCount++; 
        n = n & (n -1); 
    } 
 
    return nCount; 

 
 
int _tmain(int argc, _TCHAR* argv[]) 

    cout << CountOf1(7) << endl; 
    system("pause"); 
    return 0; 

#include "stdafx.h"
#include <iostream>
using namespace std;

int CountOf1(int n)
{
 int nCount = 0;

    while (n)
    {
  nCount++;
  n = n & (n -1);
    }

 return nCount;
}


int _tmain(int argc, _TCHAR* argv[])
{
 cout << CountOf1(7) << endl;
    system("pause");
 return 0;
}

 

 

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