二進位制中1的個數(java)
阿新 • • 發佈:2018-11-26
一、問題描述
輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。
二、演算法分析
方案一:
任何一個十進位制整數在機器上儲存的都是二進位制形式,如果該數為整數,則儲存的就是該數的二進位制形式;
如果該數為負數,則儲存的就是該數的二進位制補碼形式。
方案二:
如果一個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0, 原來在1後面的所有的0都會變成1(如果最右邊的1後面還有0的話)。其餘所有位將不會受到影響。 舉個例子:一個二進位制數1100,從右邊數起第三位是處於最右邊的一個1。減去1後,第三位變成0,它後面的兩位0變成了1,
三、演算法設計
呼叫java的API即可
四、編碼實現
方案一:
public class Numberof1 { public int numberof1(int n){ int count=0; char[] array = Integer.toBinaryString(n).toCharArray(); for (char c : array) { if(c == '1') count++; } return count; } public static void main(String[] args) { Numberof1 numberof1 = new Numberof1(); int result = numberof1.numberof1(7); System.out.println(result); } }
方案二:
public int NumberOf1(int n) {
int count = 0;
while(n!= 0){
count++;
n = n & (n - 1);//每次都消除該數中最右邊的1
}
return count;
}