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

86

Integer.toBinaryString() 是一个内置方法,非常实用。


2
需要注意的是,输出结果中的前导0将被删除。 - tony9099
4
前导零位被称为“虚拟位”。实际价值不会有任何不同,您可以根据需要放置任意数量的零。例如,111或00111的二进制将给出相同的十进制数7。 - Vaibhav

42
Integer.toString(n,8) // decimal to octal

Integer.toString(n,2) // decimal to binary

Integer.toString(n,16) //decimal to Hex

其中n为十进制数。


有没有一种方法可以获取固定位数的“二进制字符串”,例如将十进制数8转换为“8位”二进制数,即“00001000”。 - Kasun Siyambalapitiya
1
@KasunSiyambalapitiya 只需将 String bin = "00000000" + Integer.toString(n,2) 进行连接,然后对所需长度进行子字符串操作 bin.substring(0,8) - Jaec
@JessePinkman 在截取子字符串后,再次出现 00000000,因为这是在连接字符串。Integer.toString(n,2) 的结果会在 00000000 之后追加。 - Kasun Siyambalapitiya
这些方法都不会将十进制转换为其他进制,它们只是将二进制整数转换为其他进制。 - user207421

13

你的binaryForm方法正在发生无限递归,你需要返回number <= 1

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));
            printBinaryform(number);
        }
    }

    private static void printBinaryform(int number) {
        int remainder;

        if (number <= 1) {
            System.out.print(number);
            return; // KICK OUT OF THE RECURSION
        }

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

你能给我一个例子吗? - Euridice01
它陷入了一个无限递归中,而不是一个无限循环。 - user207421
好的,我已经解决了。现在,我遇到了将二进制数反转为十进制数的问题。有什么想法吗?:( - Euridice01
抽象地说,这是一个通过递归实现的循环。然而,当使用像 forwhile 这样的循环结构的语言时,区别变得更加重要,我已经纠正了我的帖子。 - tlehman
@Euridice01 如果您想了解如何在Java中使用if语句的示例,请参阅Oracle的文档:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html - tlehman
显示剩余4条评论

6
我想补充一下,对于使用以下内容的任何人:
   String x=Integer.toBinaryString()

如果您想获取二进制数字字符串并将其转换为整数。如果您使用

  int y=Integer.parseInt(x)

如果你将一个非数字的字符串转换为整数,你会得到一个NumberFormatException错误。

我做的是将字符串x中的每个字符在for循环中先转换为单个字符,然后再转换为整数。

  char t = (x.charAt(z));

然后我将每个Char转换回单独的字符串,

  String u=String.valueOf(t);

然后将每个字符串解析为整数。

我想发表这篇文章,因为我花了一段时间才弄清楚如何将二进制(例如01010101)转换为整数形式。


1
意料之外的宝石出现在意料之外的地方! - Sinstein

4
/**
 * @param no
 *            : Decimal no
 * @return binary as integer array
 */
public int[] convertBinary(int no) {
    int i = 0, temp[] = new int[7];
    int binary[];
    while (no > 0) {
        temp[i++] = no % 2;
        no /= 2;
    }
    binary = new int[i];
    int k = 0;
    for (int j = i - 1; j >= 0; j--) {
        binary[k++] = temp[j];
    }

    return binary;
}

这将一个二进制整数转换为一个包含0或1的整数数组。不是十进制转二进制。也不是被要求的内容。 - user207421

3
public static void main(String h[])
{
    Scanner sc=new Scanner(System.in);
    int decimal=sc.nextInt();
    
    String binary="";
    
    if(decimal<=0)
    {
        System.out.println("Please Enter greater than 0");
        
    }
    else
    {
        while(decimal>0)
        {
            
            binary=(decimal%2)+binary;
            decimal=decimal/2;
                                        
        }
        System.out.println("binary is:"+binary);
        
    }

}

这里没有十进制数,也没有十进制转二进制的转换。你所做的只是将二进制转换为二进制。非常无意义。 - user207421
@kohei,请先调试上面的代码。它将从命令行获取十进制数作为输入。看到使用了Scanner类。 - Venkatesh Bandarapu

1
以下是将十进制转换为二进制的代码,时间复杂度为:O(n) 线性时间,不使用任何Java内置函数。
private static int decimalToBinary(int N) {
    StringBuilder builder = new StringBuilder();
    int base = 2;
    while (N != 0) {
        int reminder = N % base;
        builder.append(reminder);
        N = N / base;
    }

    return Integer.parseInt(builder.reverse().toString());
}

0
public static void main(String[] args)
{
    Scanner in =new Scanner(System.in);
    System.out.print("Put a number : ");
    int a=in.nextInt();
    StringBuffer b=new StringBuffer();
    while(a>=1)
    {
      if(a%2!=0)
      {
        b.append(1);
       }
      else if(a%2==0)
      {
         b.append(0);
      }
      a /=2;
    }
    System.out.println(b.reverse());
}

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

0
一个相对简单而不是高效的程序,但它能够完成任务。
        Scanner sc = new Scanner(System.in);
        System.out.println("Give me my binaries");
        int str = sc.nextInt(2);
        System.out.println(str);

0

不使用 Integer.ParseInt() 将二进制转换为十进制:

import java.util.Scanner;

//convert binary to decimal number in java without using Integer.parseInt() method.

public class BinaryToDecimalWithOutParseInt {

    public static void main(String[] args) {

        Scanner input = new Scanner( System.in );
        System.out.println("Enter a binary number: ");

        int  binarynum =input.nextInt();
        int binary=binarynum;

        int decimal = 0;
        int power = 0;

        while(true){

            if(binary == 0){

                break;

            } else {

                int temp = binary%10;
                decimal += temp*Math.pow(2, power);
                binary = binary/10;
                power++;

            }
        }
        System.out.println("Binary="+binarynum+" Decimal="+decimal); ;
    }

}

输出:

请输入一个二进制数字:

1010

二进制=1010 十进制=10


使用 Integer.parseInt() 将二进制转换为十进制:

import java.util.Scanner;

//convert binary to decimal number in java using Integer.parseInt() method.
public class BinaryToDecimalWithParseInt {

    public static void main(String[] args) {

        Scanner input = new Scanner( System.in );

        System.out.println("Enter a binary number: ");
        String binaryString =input.nextLine();

        System.out.println("Result: "+Integer.parseInt(binaryString,2));

    }

}

输出:

输入一个二进制数:

1010

结果:10


1
过度宣传某个特定的产品/资源(我在这里删除了)可能会被社区视为垃圾邮件。请查看[帮助],特别是用户应该遵守哪些行为准则?的最后一节:_避免明显的自我推销_。您可能还对如何在Stack Overflow上进行广告宣传?感兴趣。 - Tunaki
Scanner.nextInt() 将十进制转换为二进制。其余部分执行其他操作。 - user207421

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