下面是根据十进制数转二进制数的算法所写的一段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
如果表达小于2^31-1的正数代码如下:
public void binaryToDecimal(int n){
int t = 0 //用来记录位数
int bin = 0//用来记录最后的二进制数
int r = 0 //用来存储余数
while(n != 0){
r = n % 2
n = n / 2
bin += r * Math().pow(10,t)
t++
}
System.out.println(bin)
}
使用字符串的拼接(+)来实现大于2^31-1的数,代码如下:
public void binaryToDecimal(int n){
String str = ""
while(n!=0){
str = n%2+str
n = n/2
}
System.out.println(str)
}
可以右移后再与0x01进行&运算 得到第一位的数字判断判断它的第几位上是0,第几位上是1,代码如下:
class ByteMove
{
public static void main(String[] args)
{
int i = 7
move(i)
}
static void move(int num){
for(int i= 0i<6i++){
System.out.println("第"+(i+1)+"位:" + (num >>i &0x01))
}
}
}
扩展资料:在windows下编译java文件、执行:
1、先创建一个txt,更改为test.java。
2、编写代码,为输出为holloword。
3、找到cmd,并进行打开cmd。
4、编译java文件,输入命令为javac test.java。
5、如果没有报错,查看当前目录下是否有class文件产生。
6、执行class文件,在命令输入java test,输出为holloword。
转换为2的几何级数倍进制比较容易,其他的就不方便了。先说和10进制的转换:
倒序将2进制数编幂数,例如10101010从后向前幂数依次为7654321,所以它转换为10进制就是1*2^7+0*2^6+1*2^5+0^2^4+1*2^3+0^2^2+1^2^1+0^2^0=170,这种算法适用于将任意进制转换为10进制,只要将底数替换即可。
下面说2的几何级数倍的算法:
一般就是将2进制按2的级数进行分段,比方说8进制(8是2的3次方),将2进制分为每3位一段进行转换,每段单独按十进制转换即可。
10101010,分为10|101|010,然后每段进行单独转换,10转换后为2,101转换后为5,010转换后为2,所以10101010(2)=252(8)。
其他进制一般算法就是先将2进制转换为10进制,再用短除法转换为其他进制,短除法我记不清怎么个算法了,并不是算公约数之类的那个短除法,借位算法比较特殊,只不过最后余数作为最后一位。
例如170(10)进制就使用170=332(7)