二進制中1的個數

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

計算機中,數值都是以補碼的形式保存。

原碼:就是十進制的數字轉換爲二進制在計算機中的表示,如正2,二進制表示爲0000 0010,-2的二進制表示爲1000 0010。前面的一位表示符號位,其中,正數爲0,負數爲1。

反碼:正數的反碼和原碼相同,負數的反碼就是保持原有符號位不變,其他位取反。

比如:

-2  
原碼:1000 0010  
反碼:1111 1101  

補碼:正數的補碼和原碼一樣,負數的補碼,就是在原來的原碼基礎上,保持符號位不變,其他位取反,然後再加1。

比如:

-2  

原碼:1000 0010  
反碼:1111 1101 
補碼:1111 1110


正數二進制的原碼,反碼及補碼都是一樣的;

負數最高位符號位不變爲1,剩下的爲正數的二進制原碼,原碼除了符號位不變,其他取反得到反碼,反碼 + 1 等於補碼

代碼:

public class Solution {
public int NumberOf1(int n) {
int count = 0;
if(n == 0){
return 0;
}else if(n > 0){
String result = Integer.toBinaryString(n);   //轉化爲二進制
char[] num = result.toCharArray();
for(int i = 0;i < num.length;i++){
if(num[i] == '1'){
count ++;
}
}
return count;
}else{
int nn = -n;
String result = Integer.toBinaryString(~nn + 1);   //轉化爲二進制
char[] num = result.toCharArray();
for(int i = 0;i < num.length;i++){
if(num[i] == '1'){
count ++;
}
}
return count;
}
    }
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.NumberOf1(-2));
}
}

發佈了79 篇原創文章 · 獲贊 19 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章