方法一 :直接利用jdk的BigInteger操作
public static String decimalToBinary(int decimalSource) {
BigInteger bi = new BigInteger(String.valueOf(decimalSource)); // 轉換成 BigInteger 類型,默認是十進制
return bi.toString(2); // 參數 2 指定的是轉化成二進制
}
說明:
bi.to(n)的意思是轉成n進制。
方法二:餘數短除法除以二
public static String decimalToBinary(int decimalSource) {
StringBuilder sb = new StringBuilder();
while (decimalSource != 0) {
sb.append(decimalSource % 2);
decimalSource = decimalSource >> 1;
}
return sb.reverse().toString();
}
方法三 :
public static String decimalToBinary(long decimalSource) {
StringBuffer sb = new StringBuffer();
int length = (int) (Math.log(decimalSource) / Math.log(2));
//取餘數
decimalSource = (int) (decimalSource - Math.pow(2, length));
if (decimalSource == 0) {
return "0";
}
// 先取最高位
sb.append(1);
for (int i = length - 1; i >= 0; i--) {
//餘數檢查深度
int power = (int) (Math.log(decimalSource) / Math.log(2));
//餘數 深度 = length - 1 說明 length - 1位 爲1
if (power == i) {
decimalSource = (int) (decimalSource - Math.pow(2, i));
sb.append(1);
} else {
sb.append(0);
}
}
return sb.toString();
}
方法四:
public static String decimalToBinary(int decimalSource) {
StringBuffer sb = new StringBuffer();
while (decimalSource != 0) {
//此&運算,decimalSource & 1,目的是獲取最低位的二進制數值
sb.append(decimalSource & 1);
//此>>運算,decimalSource >> 1,目的是將獲取到的最低位二進制數值除去
decimalSource = decimalSource >> 1;
}
return sb.reverse().toString();
}
注意:負整數轉換爲二進制 爲 取反加一
解釋:將該負整數對應的正整數先轉換成二進制,然後對其“取補碼”,再對取補後的結果加1即可。
例如要把-52換算成二進制:
1.先取得52的二進制:00110100
2.對所得到的二進制數取反:11001011
3.將取反後的數值加一即可:11001100 即:(-52)10進制=(11001100)2進制