2进制转10进制,10进制转2进制
//2进制转10进制: 按权相加
public static double binary2decimal(String binaryStr) {
String[] binaryArr = binaryStr.split("\\.");
String integer = binaryArr[0];// 整数部分
double decimal = 0;
int j = 0;
for(int i = integer.length()-1; i >=0; i--){
decimal += (integer.charAt(i) - '0') * Math.pow(2,j++);
}
if(binaryArr.length > 1){ //小数部分
String fraction = binaryArr[1];// 小数部分
int k = 0;
for(int i = 0; i < fraction.length(); i++){
decimal += (fraction.charAt(i) - '0') * Math.pow(2,--k);
}
}
return decimal;
}
//10进制转2进制,有整数和小数的。
public static String decimal2binary(double decimal) {
long integer = Math.round(Math.floor(decimal));// 整数部分
decimal -= integer; //小数部分
String binary = "";
//先算整数部分: 除以2取余,逆序输出
do{
binary = integer%2 + binary; //余数
integer /= 2; //整除的结果
} while(integer > 0);
//小数点
binary += ".";
//在算小数部分: 乘以2取整,顺序输出
do{
decimal *= 2;
integer = Math.round(Math.floor(decimal)); //整数部分
decimal -= integer; //小数部分
binary += integer;
}while (decimal > 0);
return binary;
}