java 十进制转二进制!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
参考技术A //这里有一个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;
二进制();
补码();
输出();

复制搜索复制搜索

Java8的新特性,二进制序列转十进制数字

package kata_007_二进制序列转十进制int;
/**
 * java8 Lambda表达式转换binary序列->十进制数
 */
import java.util.ArrayList;

public class ShortBinaryToDecimal {

    public static void main(String[] args) {

        ArrayList<Integer> binary = new ArrayList();
        binary.add(1);
        binary.add(0);
        binary.add(1);
        binary.add(0);
        int result = binaryToDecimal(binary);
        System.out.println(result);
    }
    
    public static int binaryToDecimal(ArrayList<Integer> binary) {
          return binary.stream().reduce((x, y) -> x * 2 + y).get();
    }

}

如果不用Lambda表达式,使用传统方式:

package kata_007_二进制序列转十进制int;

import java.awt.List;
import java.util.ArrayList;

public class TestBinaryToDecimal {

    public static void main(String[] args) {
        
        //test method
        ArrayList binary = new ArrayList();
        binary.add(1);
        binary.add(0);
        binary.add(0);
        binary.add(1);
        int result = binaryToDecimal(binary);
        System.out.println(result);
    }
    
    public static int binaryToDecimal(ArrayList<Integer> binary) {
        String binaryStr = "";
        for(int i=0;i<binary.size();i++) {
            binaryStr += binary.get(i);
        }
        //String binary -> String decimal
        String decimalStr = Integer.valueOf(binaryStr,2).toString();
        //String decimal -> int
        int decimalResult = Integer.parseInt(decimalStr);
        
        
        return decimalResult;
    }

}

 

以上是关于java 十进制转二进制!的主要内容,如果未能解决你的问题,请参考以下文章

如何将十六进制转成十进制,在java中

java中如何把十六进制转为十进制

JAVA 十六进制转十进制

Java学习笔记之四java进制转化

java 进制转换 十进制转二,八,十六进制

Java十六进制转换为十进制