劍指Offer的學習筆記(C#篇)-- 二進制中1的個數

題目描述

輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼錶示。

一 . 解題思路

        新穎的解法,使得該題目運用到了二進制的位運算符。先了解一下位運算符!spa

       此題便很好的發揮了位運算符&的特色,怎麼想呢?這樣:二進制數均是由0和1構成,當輸入的參數X不等於0時,咱們使用該參數X與(X-1)作&運算,運算結果以下圖,可見,因爲X與X-1的二進制變化是發生在X爲1最後一位,即X-1在此處之後的位置均發生了改變,&運算後發現比X最後面少了一個1,所以,此時,記錄一次,而後循環往復,直至X爲0,記錄的次數即爲X中1的個數。code

 

二 . 代碼實現

class Solution
{
    public int NumberOf1(int n)
    {
        // write code here
        //設二進制初始時1的個數爲0個
        int x = 0;
        while(n!=0)
        {
            x++;
            //&爲二進制取位符
            n=n&(n-1);
        }
        return x;
    }
}

        哇,題目一開始以爲很煩人,但代碼就這麼點,真的很不甘心是嗎?哈哈。。blog

相關文章
相關標籤/搜索