11. 位運(yùn)算-二進(jìn)制中1的個數(shù)

題目描述

輸入一個整數(shù),輸出該數(shù)二進(jìn)制表示中1的個數(shù)。其中負(fù)數(shù)用補(bǔ)碼表示。

/**
 * Created by ZengXihong 2019-06-05.
 * #題目描述
 >輸入一個整數(shù),輸出該數(shù)二進(jìn)制表示中1的個數(shù)。其中負(fù)數(shù)用補(bǔ)碼表示。
 */
public class Solution11 {
    public static int NumberOf1_1(int n) {
        //采用 Integer 類方法
        return Integer.bitCount(n);
    }

    public static int NumberOf1_2(int n) {
        /**
         *  假設(shè) n 的二進(jìn)制表示為   100001000
         *  則 n-1 的二進(jìn)制表示為   100000111
         *  n & (n-1)              100000000    計(jì)數(shù)加1,下一個1 為倒數(shù)第 9 位
         *  原理:
         * 1. 將一個數(shù)字表示為二進(jìn)制
         * 2. 從右往左數(shù) 1 的個數(shù)
         * 3. 將 n 減去 1 后,從右往左的第一個 1 ,其位變?yōu)?,且該位 左邊不變,右邊全為 1
         * 4. 將 n 和 n-1 進(jìn)行 與 計(jì)算。則得到,該值 左側(cè)依舊不變,該位以及后邊 均為 0
         * 5. 下一位則是原數(shù) n 從右往左的第二個1,也即為【與運(yùn)算】的結(jié)果從右往左的 第一個 1 (和第 2 步循環(huán))
         * 6. 當(dāng)最后為 0 時,則退出循環(huán)
         */
        int count =0;
        while (n!=0){
            ++count;
            n = n & (n-1);
        }
        return count;
    }

    public static void main(String[] args) {
        System.out.println(NumberOf1_1(10));
        System.out.println(NumberOf1_2(10));
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容