n的二進制包含多少個1

/**
 * 判斷一個數中喲多少個1
 * 使用移位,int爲32位,通過移位判斷
 */
public static int count1(int n){
    int count = 0;
    int i = 0;
    do{
        if((n&1) == 1){
            count ++;
        }
        i ++;
        n >>= 1;
    }while (i<32);
    return count;
}

/**
 * 使用算法:如n=9 (二進制寫法1001) ,則n-1=8 (二進制寫法1000),
 * 1001 & 1000 後結果爲1000,即去掉了最右端的1,
 * 1000 再& 0111 結果爲0000,如此統計循環的次數即可
 * @param n
 * @return
 */
public static int countBits(int n) {
    int count = 0;
    while (n!=0){
        n &= (n-1);
        count ++ ;
    }
    return count;
}

public static void main(String[] args) {
    int val = 58585858;
    System.out.println(val+"包含1的數量爲:"+count1(val));
    System.out.println(val+"包含1的數量爲:"+countBits(val));
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章