下面是根据十进制数转二进制数的算法所写的一段Java程序示例代码:
import java.math.BigDecimal
public class Test {
public static void main(String[] args) {
Test t = new Test()
double d = 8
String s = t.decimal2BinaryStr(d)
System.out.println("十进制数"+d+"转成二进制数为:"+s)
}
/**
* 十进制数转二进制数
* @param d 十进制数
* @return 十进制数转换成二进制的字符串
*/
public String decimal2BinaryStr(double d){
String result = decimal2BinaryStr_Inte(d)
result += decimal2BinaryStr_Deci(d)
return result
}
/**
* 十进制整数部分转二进制数
* @param d 十进制数
* @return 十进制整数部分转换成二进制的字符串
*/
public String decimal2BinaryStr_Inte(double d){
// return Integer.toBinaryString((int)d)
/*
* 本来利用上面的Integer.toBinaryString(int)就可以得到整数部分的二进制结果,
* 但为了展示十进制转二进制的算法,现选择以下程序来进行转换
*/
String result = ""
long inte = (long)d
int index = 0
while(true){
result += inte%2
inte = inte/2
index++
if(index%4 == 0){
result+=" "
}
if(inte==0){
while(index%4!=0){
result+="0"
index++
}
break
}
}
char[] c = result.toCharArray()
char[] cc = new char[c.length]
for(int i=c.lengthi>0i--){
cc[cc.length-i] = c[i-1]
}
return new String(cc)
}
/**
* 十进制小数部分转二进制
* @param d 十进制数
* @return 十进制小数部分转换成二进制小数的字符串
*/
public String decimal2BinaryStr_Deci(double d){
return decimal2BinaryStr_Deci(d, 0)
}
/**
* 十进制小数部分转二进制
* @param d 十进制数
* @param scale 小数部分精确的位数
* @return 十进制小数部分转换成二进制小数的字符串
*/
public String decimal2BinaryStr_Deci(double d, int scale){
double deci = sub(d,(long)d)
if(deci==0){
return ""
}
//为了防止程序因所转换的数据转换后的结果是一个无限循环的二进制小数,因此给其一个默认的精确度
if(scale==0){
scale = (String.valueOf(deci).length()-2)*4
}
int index = 0
StringBuilder inteStr = new StringBuilder()
double tempD = 0.d
while(true){
if(deci==0 || index==scale){
while(index%4!=0){
inteStr.append("0")
index++
}
break
}
if(index==0){
inteStr.append(".")
}
tempD = deci*2
inteStr.append((int)tempD)
deci = sub(tempD ,(int)tempD)
index++
if(index%4 == 0){
inteStr.append(" ")
}
}
return inteStr.toString()
}
/**
* 提供精确的减法运算。
* @param v1 被减数
* @param v2 减数
* @return 两个参数的差
*/
public static double sub(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1))
BigDecimal b2 = new BigDecimal(Double.toString(v2))
return b1.subtract(b2).doubleValue()
}
}
例如将十进制数1234.5转成二进制数为:0100 1101 0010.1000
Java常用十六进制。1、计算机硬件是0101二进制的,16进制刚好是2的倍数,更容易表达一个命令或者数据
2、最早规定ASCII字符集采用的就是8bit(后期扩展了,但是基础单位还是8bit),8bit用2个16进制直接就能表达出来,不管阅读还是存储都比其他进制要方便
3、计算机中CPU运算也是遵照ASCII字符集,以16、32、64的这样的方式在发展,因此数据交换的时候16进制也显得更好
4、为了统一规范,CPU、内存、硬盘我们看到都是采用的16进制计算