将十进制转换为二进制 Java

33

我正在尝试使用Java将用户输入的十进制转换为二进制数字。

我遇到了错误。

package reversedBinary;
import java.util.Scanner;

public class ReversedBinary {


public static void main(String[] args) {
    int number; 

    Scanner in = new Scanner(System.in);

    System.out.println("Enter a positive integer");
    number=in.nextInt();

    if (number <0)
        System.out.println("Error: Not a positive integer");
    else { 

        System.out.print("Convert to binary is:");
        System.out.print(binaryform(number));
}

}

private static Object binaryform(int number) {
    int remainder;

    if (number <=1) {
        System.out.print(number);

    }

    remainder= number %2; 
    binaryform(number >>1);
    System.out.print(remainder);

    { 
    return null;
} } }

如何在Java中将十进制转换为二进制?


4
如果您发现错误,您会想与我们分享。 - Hovercraft Full Of Eels
Long.toBinaryString(Double.doubleToRawLongBits(d)); 参考 https://dev59.com/f2w15IYBdhLWcg3w1_YN - DotNetRussell
由于某种原因,它编译通过了,但我没有看到它打印出二进制形式 @_@ 看起来是这里的问题:输入一个正整数 2 转换为二进制是:1000000(永远都是零...)Exception in thread "main" java.lang.StackOverflowError at java.io.PrintStream.write(Unknown Source) at java.io.PrintStream.print(Unknown Source) at reversedBinary.ReversedBinary.binaryform(ReversedBinary.java:30) at reversedBinary.ReversedBinary.binaryform(ReversedBinary.java:36) - Euridice01
这里没有小数。输入已经是二进制的了。你要做的只是改变表示方式,可能是ASCII码。不清楚你在问什么。 - user207421
最简单的解决方案是使用此链接中提到的内置方法。 - Hemanth Kumar
26个回答

-1

我刚刚自己解决了这个问题,我想分享我的答案,因为它包括二进制反转和转换为十进制。虽然我不是很有经验的编码人员,但希望这对其他人有所帮助。

我的做法是在转换二进制数据时将其推入堆栈,然后弹出以进行反转并将其转换回十进制。

import java.util.Scanner;
import java.util.Stack;

public class ReversedBinary 
{
    private Stack<Integer> st;

    public ReversedBinary()
    {
        st = new Stack<>();
    }

    private int decimaltoBinary(int dec)
    {
        if(dec == 0 || dec == 1)
        {
            st.push(dec % 2);
            return dec;
        }

        st.push(dec % 2);

        dec = decimaltoBinary(dec / 2);        

        return dec;
    }

    private int reversedtoDecimal()
    {
        int revDec = st.pop();
        int i = 1;

        while(!st.isEmpty())
        {
            revDec += st.pop() * Math.pow(2, i++);
        }

        return revDec;
    }

    public static void main(String[] args)
    {
        ReversedBinary rev = new ReversedBinary();

        System.out.println("Please enter a positive integer:");

        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine())
        {
            int input = Integer.parseInt(sc.nextLine());
            if(input < 1 || input > 1000000000)
            {
                System.out.println("Integer must be between 1 and 1000000000!");
            }
            else
            {
                rev.decimaltoBinary(input);
                System.out.println("Binary to reversed, converted to decimal: " + rev.reversedtoDecimal());
            }
        }

    }
}

这将转换一个二进制整数,而不是十进制数。 - user207421

-1
import java.util.*;

public class BinaryNumber 
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter the number");
        int n = scan.nextInt();
        int rem;
        int num =n; 
        String str="";
        while(num>0)
        {
            rem = num%2;
            str = rem + str;
            num=num/2;
        }
        System.out.println("the bunary number for "+n+" is : "+str);
    }
}

Scanner.nextInt() 将十进制数转换为二进制。其余部分执行其他操作。 - user207421

-1

这是一个非常基本的过程,我在将一般过程写在纸上后得到了它。

import java.util.Scanner;

    public class DecimalToBinary {

        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            System.out.println("Enter a Number:");
            int number = input.nextInt();
            while(number!=0)
            {
                if(number%2==0) 
                {
                    number/=2;
                    System.out.print(0);//Example: 10/2 = 5     -> 0
                }
                else if(number%2==1) 
                {
                    number/=2;
                    System.out.print(1);// 5/2 = 2              -> 1
                }
                else if(number==2)
                {
                    number/=2;
                    System.out.print(01);// 2/2 = 0             -> 01   ->0101
                }
            }
        }
    }

这将转换一个二进制整数,而不是十进制数。 - user207421

-1

最快的解决方案之一:

public static long getBinary(int n)
    {
        long res=0;
        int t=0;
        while(n>1)
        {
            t= (int) (Math.log(n)/Math.log(2));
            res = res+(long)(Math.pow(10, t));
            n-=Math.pow(2, t);
        }
        return res;
    }

这将转换一个二进制整数,而不是十进制数。 - user207421

-2

不需要任何Java内置函数。简单的递归就可以做到。

public class DecimaltoBinaryTest {
     public static void main(String[] args) {
        DecimaltoBinary decimaltoBinary = new DecimaltoBinary();
        System.out.println("hello " + decimaltoBinary.convertToBinary(1000,0));
    }

}

class DecimaltoBinary {

    public DecimaltoBinary() {
    }

    public int convertToBinary(int num,int binary) {
        if (num == 0 || num == 1) {
            return num;
        } 
        binary = convertToBinary(num / 2, binary);
        binary = binary * 10 + (num % 2);
        return binary;
    }
}

这将转换二进制整数,而不是十进制数。 - user207421

-2
    int n = 13;
    String binary = "";

    //decimal to binary
    while (n > 0) {
        int d = n & 1;
        binary = d + binary;
        n = n >> 1;
    }
    System.out.println(binary);

    //binary to decimal
    int power = 1;
    n = 0;
    for (int i = binary.length() - 1; i >= 0; i--) {
        n = n + Character.getNumericValue(binary.charAt(i)) * power;
        power = power * 2;
    }

    System.out.println(n);

嗨,brahmananda Kar,感谢您的提问。但请记住,您正在回答一个已经存在一段时间并且有高评分答案的问题。为了使您的回答在这种情况下有价值,您需要使其非常高质量;我建议进行[编辑]以添加一些解释,说明为什么这种方法比其他答案更好。 - Vince Bowdren
这将转换一个二进制整数,而不是十进制数。 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接