将十进制转换为二进制 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个回答

0

实际上,您可以将其编写为递归函数。每个函数调用返回其结果并添加到先前结果的尾部。可以使用Java编写此方法,如下所示:

public class Solution {

    private static String convertDecimalToBinary(int n) {
        String output = "";
        if (n >= 1) {
            output = convertDecimalToBinary(n >> 1) + (n % 2);
        }

        return output;
    }

    public static void main(String[] args) {
        int num = 125;
        String binaryStr = convertDecimalToBinary(num);

        System.out.println(binaryStr);
    }

}

让我们来看一下上面的递归是如何工作的:

enter image description here

调用convertDecimalToBinary方法一次后,它会一直调用自己,直到数字的值小于1,并将所有连接的结果返回到首次调用它的位置。

参考资料:

Java - 位运算符和位移动运算符 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html


0
更好的做法:
public static void main(String [] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int t = Integer.parseInt(bf.readLine().trim());
        double ans = 0;
        int i=0;

        while(t!=0){
           int digit = t & 1;
           ans = ans + (digit*Math.pow(10,i));
           i++;
           t =t>>1;
        }
        System.out.println((int)ans);
    }

0
public static String convertToBinary(int dec)
{
    String str = "";
    while(dec!=0)
    {
        str += Integer.toString(dec%2);
        dec /= 2;
    }
    return new StringBuffer(str).reverse().toString();
}

0

这可能看起来有点傻,但如果你想尝试实用函数

System.out.println(Integer.parseInt((Integer.toString(i,2))));

一定有一些实用的方法可以直接做到这一点,我记不清了。


你要么是记不住了,那这就不是一个答案;要么你刚刚发布了它,那你的回答就是自相矛盾的。那到底是哪种情况呢? - user207421
上述方法可以解决问题,但这种方式有点滑稽,不过也很简单。可能会有一些实用方法(现成的Java API方法),但我不确定。 - user3123372
这将转换一个二进制整数,而不是十进制数。 - user207421

0
如果你想要反转计算出的二进制形式,可以使用StringBuffer类并简单地使用reverse()方法。这里有一个示例程序,将解释它的用法并计算二进制数。
public class Binary {

    public StringBuffer calculateBinary(int number) {
        StringBuffer sBuf = new StringBuffer();
        int temp = 0;
        while (number > 0) {
            temp = number % 2;
            sBuf.append(temp);
            number = number / 2;
        }
        return sBuf.reverse();
    }
}


public class Main {

    public static void main(String[] args) throws IOException {
        System.out.println("enter the number you want to convert");
        BufferedReader bReader = new BufferedReader(newInputStreamReader(System.in));
        int number = Integer.parseInt(bReader.readLine());

        Binary binaryObject = new Binary();
        StringBuffer result = binaryObject.calculateBinary(number);
        System.out.println(result);
    }
}

请注意,如果您希望您的代码以代码格式而不是文本格式显示,您必须在代码前加上四个空格。 - Artemix
这将转换一个二进制整数,而不是十进制数。 - user207421

0

在C#中,但与Java相同:

public static void findOnes2(int num)
{
    int count = 0;      // count 1's 
    String snum = "";   // final binary representation
    int rem = 0;        // remainder

    while (num != 0)
    {
        rem = num % 2;           // grab remainder
        snum += rem.ToString();  // build the binary rep
        num = num / 2;
        if (rem == 1)            // check if we have a 1 
            count++;             // if so add 1 to the count
    }

    char[] arr = snum.ToCharArray();
    Array.Reverse(arr);
    String snum2 = new string(arr);
    Console.WriteLine("Reporting ...");
    Console.WriteLine("The binary representation :" + snum2);
    Console.WriteLine("The number of 1's is :" + count);
}

public static void Main()
{
    findOnes2(10);
}

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

0

所有的问题都可以用一行代码解决! 要将我的解决方案整合到您的项目中,只需删除您的binaryform(int number)方法,并将System.out.print(binaryform(number));替换为System.out.println(Integer.toBinaryString(number));


欢迎来到 Stack Overflow。请考虑为您的答案添加解释。 - Olivier De Meulder
这个问题是关于将十进制转换为二进制的,而你还没有回答它。 - user207421
@EJP 我相信我的原始答案是有效的,但不可否认它有些繁琐。我已经更新了我的答案。 - Sir Jacob

0
/**
 * converting decimal to binary
 *
 * @param n the number
 */
private static void toBinary(int n) {
    if (n == 0) {
        return; //end of recursion
    } else {
        toBinary(n / 2);
        System.out.print(n % 2);
    }
}

/**
 * converting decimal to binary string
 *
 * @param n the number
 * @return the binary string of n
 */
private static String toBinaryString(int n) {
    Stack<Integer> bits = new Stack<>();
    do {
        bits.push(n % 2);
        n /= 2;
    } while (n != 0);

    StringBuilder builder = new StringBuilder();
    while (!bits.isEmpty()) {
        builder.append(bits.pop());
    }
    return builder.toString();
}

或者你可以使用 Integer.toString(int i, int radix)

例如:(将12转换为二进制)

Integer.toString(12, 2)

-1
使用StringBuilder更好,可以在正在构建的小数字符串前面使用insert(),而无需调用reverse()。
static String toBinary(int n) {
    if (n == 0) {
        return "0";
    }

    StringBuilder bldr = new StringBuilder();
    while (n > 0) {
        bldr = bldr.insert(0, n % 2);
        n = n / 2;
    }

    return bldr.toString();
}

@EJP请仔细阅读原始问题,不要只看帖子的标题。原始问题清楚地陈述了如何将十进制整数转换为二进制,并且提供了示例。System.out.println("输入一个正整数"); number = in.nextInt(); - BJYC

-1
//converts decimal to binary string
String convertToBinary(int decimalNumber){  
    String binary="";
    while(decimalNumber>0){
        int remainder=decimalNumber%2;
        //line below ensures the remainders are reversed
        binary=remainder+binary;
        decimalNumber=decimalNumber/2;
    }
    return binary;

}

请考虑在您的答案中添加解释。 - Raju
这将转换一个二进制整数,而不是十进制数。 - user207421

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