java 十进制转二进制!

要求:用for~8位、16位、32位、64位,出类似地结果“ 0000 1010"注意补零,逢四空一
, 注意前补零,逢四空一格!选择bits数~~例如16位的出“0000 0000 0000 1110” 如果其它方法均可,请帮帮帮忙! 急要算式!

十进制数转二进制数的算法如下:
1. 十进制整数转换为二进制整数

十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余
数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
2.十进制小数转换为二进制小数

十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又
得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。然后把取出的整数部分按顺序排列起来,先取的整数作为
二进制小数的高位有效位,后取的整数作为低位有效位。

下面就给出根据十进制数转二进制数的算法所写的一段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.length; i>0; i--){
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
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-10
//这里有一个32位的和64位的类似题目,更改一下部分功能应该能够实现你所要的内容
//在定义的时候把获得的1010等存入字符串再计算其他的内容
/*
* 请将下面的正数转换成为整数int和长整数long类型补码表示的二进制数
* 11,33,105,7,-9,-5,-111,-28,-65
*/

/**
*
* @author 一叶
*/
public class E二进制补码_实例_自作 {
public static void main(String args[]){
Buma 补码=new Buma();
补码.run(111,"long");
补码.run(-65,"int");
}
}
class Buma{
private int x;
private String leixing;
private int a[]=new int[64];//定义数组,这里定义长整形的占用位数,短整型的取一部分使用
//初始化
Buma(){
for(int j=0;j<64;j++)
{a[j]=0;}
}
//判断值正负
private boolean 正负(){
if(x>0) return true;
else return false;
}
//判断短整型还是长整形
private int 整形(){
if(leixing=="int") return 32;
else if(leixing=="long") return 64;
else return 0;
}
//求其2进制数
private void 二进制(){
int temp;
if(正负()) temp=x;
else temp=-x;
for(int i=整形()-1;i>0;i--)
{
if(temp<1)
break;
a[i]=temp%2;
temp=temp/2;
}
}
//二进制加法运算
private void 二进制加法(int x){
if(x==1)
for(int i=整形()-1;i>0;i--)
{
a[i]=a[i]+1;
if(a[i]==2)
a[i]=0;
else break;
}
}
//求其补码
private void 补码(){
if(!正负())//负数取反操作,正数则不处理
{
for(int i=0;i<整形();i++)
{
if(a[i]==0) a[i]=1;
else a[i]=0;
}
二进制加法(1);
}
}
private void 输出(){
for(int i=0;i<整形();i++)
{
System.out.print(a[i]);
}
System.out.print("\n");
}
void run(int x,String leixing){
this.x=x;
this.leixing=leixing;
二进制();
补码();
输出();
}
}复制搜索复制搜索本回答被网友采纳
相似回答