編程之美1——一個數的二進位表示中1的個數,之美二進位

來源:互聯網
上載者:User

編程之美1——一個數的二進位表示中1的個數,之美二進位

這裡要介紹3種解法

第一種;(常規解法)

數在電腦內部都是用二進位表示的,所以可連續用數n除2

代碼1:


<span style="font-size:14px;">#include <iostream>using namespace std;int main(void){    int n,m;    m=0;    cin>>n;    while(n)    {        if(n%2)    //如果n不能整除2,說明當前n的末尾數為1            m++;        n>>=1;    //n右移1位,即n/2    }    cout<< m <<endl;    return 0;}</span>


第二種:使用位操作

&:若a為1,且b為1,則a&b為1,否則,a&b為0

這裡初始化i=0x1;

n&i若為1,則n的末尾為1,否則為0

代碼2:



<span style="font-size:14px;">#include <iostream>using namespace std;int main(void){   //    使用位操作,1 和 二進位的最後一位進行 與(&) 運算    int n,i,m;    m=0;    i=0x1;    cin>>n;    while(n)    {        m+=(n&i);        n>>=1;    }    cout << m <<endl;    return 0;}</span>


第三種:使用另一種位操作

若n的二進位表示為0010 0000,則第二種演算法明顯有待改進

可讓n與n-1進行 & 運算,若n&(n-1)==0,則為上述情況(n的二進位表示中,只有一位是 0)。


代碼3:


<span style="font-size:14px;">#include <iostream>using namespace std;int main(void){      int n,m;    m=0;    cin>>n;    while(n)    {        n&=(n-1);        m++;    }    cout << m <<endl;     return 0;}</span>


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.