【问题标题】:Converting Decimal to Binary Java将十进制转换为二进制 Java
【发布时间】:2013-01-24 22:20:21
【问题描述】:

我正在尝试使用 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 中将十进制转换为二进制?

【问题讨论】:

  • 如果您发现错误,请与我们分享。
  • Long.toBinaryString(Double.doubleToRawLongBits(d));参考stackoverflow.com/questions/6359847/…
  • 由于某种原因,它编译但我没有看到它打印出二进制形式@_@它看起来像这里出于某种原因:输入一个正整数2转换为二进制是:1000000(永远零..)在 reversedBinary.ReversdBinary.binaryform 的 java.io.PrintStream.print(Unknown Source)处的 java.io.PrintStream.write(Unknown Source)处的线程“main”java.lang.StackOverflowError 中的异常(ReversdBinary.java: 30) 在 reversedBinary.ReversdBinary.binaryform(ReversdBinary.java:36) 在
  • 这里没有小数点。输入已经是二进制的。您所做的只是更改表示形式,可能是 ASCII。不清楚你在问什么。

标签: java binary decimal


【解决方案1】:

更好的方法:

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);
    }

【讨论】:

    【解决方案2】:

    嗯,你可以像这样使用while循环,

    import java.util.*;
    public class DecimalToBinaryDemo
    {
        // this function converts decimal to binary
        static void toBinary(int num)
        {
           // here we are storing binary number
           int binaryNumber[] = new int[1000];
           // "count" variable is counter for binary array
           int count = 0;
           while(num > 0)
           {
              // storing remainder in binary array
              binaryNumber[count] = num % 2;
              num = num / 2;
              count++;
           }
           // here we are printing binary in reverse order
           for(int a = count - 1; a >= 0; a--)
              System.out.print(binaryNumber[a]);
        }
        public static void main(String[] args)
        {
           int number = 20;
           toBinary(number);
       }
    }
    

    输出: 10100

    【讨论】:

    • 这会转换二进制整数,而不是十进制数。
    【解决方案3】:

    如果你想反转计算的二进制形式,你可以使用 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);
        }
    }
    

    【讨论】:

    • 请注意,如果您希望将代码格式化为代码而不是文本,则必须在其前面加上四个空格。
    • 这会转换二进制整数,而不是十进制数。
    【解决方案4】:

    实际上,您可以将其编写为递归函数。每个函数调用都返回它们的结果并添加到前一个结果的尾部。可以使用 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);
        }
    
    }
    

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

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

    参考资料:

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

    【讨论】:

      【解决方案5】:
      public static String convertToBinary(int dec)
      {
          String str = "";
          while(dec!=0)
          {
              str += Integer.toString(dec%2);
              dec /= 2;
          }
          return new StringBuffer(str).reverse().toString();
      }
      

      【讨论】:

        【解决方案6】:
        /**
         * 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)
        

        【讨论】:

          【解决方案7】:

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

          【讨论】:

          • 欢迎来到 Stack Overflow。请考虑为您的答案添加解释。
          • 问题是十进制转二进制,你还没回答。
          • @EJP 我相信我的原始答案确实有效,但它确实很麻烦。我已经更新了我的答案。
          【解决方案8】:

          以下将十进制转换为具有时间复杂度的二进制: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());
          }
          

          【讨论】:

            【解决方案9】:

            一个相当简单而不是高效的程序,但它可以完成这项工作。

                    Scanner sc = new Scanner(System.in);
                    System.out.println("Give me my binaries");
                    int str = sc.nextInt(2);
                    System.out.println(str);
            

            【讨论】:

              【解决方案10】:

              您的binaryForm 方法陷入无限递归,如果number &lt;= 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);
                  }
              }
              

              【讨论】:

              • 谢谢!!!另外,我意识到如果我添加 return null 以退出循环。 IF 例如,我输入 2 转换为二进制,输出为 10null....
              • 没问题。请注意,您正在打印binaryForm(number) 的值,当它终止时,将返回null。您需要创建一个Object,将其值设置为binaryForm(number),然后仅在值不为空时打印它。
              • 你能举个例子吗?
              • 它陷入了无限递归,而不是无限循环。
              • 好的,让它工作。现在,我无法将二进制数反转为十进制。有任何想法吗? :(
              【解决方案11】:

              使用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();
              【解决方案12】:
              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 more than 0");
              
                  }
                  else
                  {
                      while(decimal>0)
                      {
              
                          binary=(decimal%2)+binary;
                          decimal=decimal/2;
              
                      }
                      System.out.println("binary is:"+binary);
              
                  }
              
              }
              

              【讨论】:

              • 这里没有十进制数,也没有十进制到二进制的转换。您所做的就是将二进制转换为二进制。毫无意义。
              • @kohei..请先对上面的代码进行调试..它将从命令行获取输入为十进制数..查看用于此的扫描仪类
              【解决方案13】:

              最快的解决方案之一:

              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;
                  }
              

              【讨论】:

              • 转换二进制整数,而不是十进制数。
              【解决方案14】:
                  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,感谢您的提问。但是请记住,您正在发布一个已经存在一段时间的问题的新答案,并且具有高度评价的答案。为了在这种情况下使您的产品有价值,您需要使其非常高质量;我建议edit 添加一些解释,说明为什么这种方法比其他答案中的方法更好。
              • 这会转换二进制整数,而不是十进制数。
              【解决方案15】:

              这是十进制到二进制的三种不同方式的转换

              import java.util.Scanner;
              public static Scanner scan = new Scanner(System.in);
              
                  public static void conversionLogical(int ip){           ////////////My Method One 
                      String str="";
                      do{
                          str=ip%2+str;
                          ip=ip/2;
              
                      }while(ip!=1);
                      System.out.print(1+str);
              
                  }
                  public static void byMethod(int ip){                /////////////Online Method
                      //Integer ii=new Integer(ip);
                      System.out.print(Integer.toBinaryString(ip));
                  }
                  public static String recursion(int ip){             ////////////Using My Recursion
              
                      if(ip==1)
                          return "1";
                      return (DecToBin.recursion(ip/2)+(ip%2));
              
              
                  }
              
                  public static void main(String[] args) {            ///Main Method
              
                      int ip;         
                      System.out.println("Enter Positive Integer");
                      ip = scan.nextInt();
              
                      System.out.print("\nResult 1 = ");  
                      DecToBin.conversionLogical(ip);
                      System.out.print("\nResult 2 = ");
                      DecToBin.byMethod(ip);
                      System.out.println("\nResult 3 = "+DecToBin.recursion(ip));
                  }
              }
              

              【讨论】:

              • 这会转换二进制整数,而不是十进制数。
              【解决方案16】:
              //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;
              
              }
              

              【讨论】:

              • 请考虑在您的答案中添加解释。
              • 这会转换二进制整数,而不是十进制数。
              【解决方案17】:

              不使用 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

              结果:1​​0

              【讨论】:

              【解决方案18】:
              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() 将十进制转换为二进制。剩下的部分做其他事情。
              【解决方案19】:

              这是一个非常基本的程序,我在纸上写了一个通用程序后得到了这个。

              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
                              }
                          }
                      }
                  }
              

              【讨论】:

              • 转换二进制整数,而不是十进制数。
              【解决方案20】:
              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() 将十进制转换为二进制。剩下的部分做其他事情。
              【解决方案21】:

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

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

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

              【讨论】:

              • 这会转换二进制整数,而不是十进制数。
              【解决方案22】:

              不需要任何 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;
                  }
              }
              

              【讨论】:

              • 这会转换二进制整数,而不是十进制数。
              【解决方案23】:
              Integer.toString(n,8) // decimal to octal
              
              Integer.toString(n,2) // decimal to binary
              
              Integer.toString(n,16) //decimal to Hex
              

              其中 n = 十进制数。

              【讨论】:

              • 有没有办法以固定位数获得binary string,例如8bit二进制00001000中的十进制8
              • @KasunSiyambalapitiya 只需连接String bin = "00000000" + Integer.toString(n,2),然后将所需长度的子串bin.substring(0,8)
              • @JessePinkman 在子字符串之后再次出现00000000,因为这是连接StringsInteger.toString(n,2) get 的结果附加在 00000000 之后?
              • 这些方法都不能将十进制转换为任何东西。它们都将二进制整数转换为其他值。
              【解决方案24】:

              这可能看起来很傻,但如果你想尝试实用功能

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

              肯定有什么实用方法可以直接做的,我记不得了。

              【讨论】:

              • 要么你不记得它,在这种情况下这不是一个答案,或者你刚刚发布它,在这种情况下你的答案是自相矛盾的。是哪个?
              • 上述方法只是解决目的,但它是一种有趣的方法,但它也很简单。并且可能有一些实用方法(现成的 java api 方法),我不确定。
              • 这会转换二进制整数,而不是十进制数。
              【解决方案25】:

              我只想为任何使用的人添加:

                 String x=Integer.toBinaryString()
              

              获取二进制数字字符串并希望将该字符串转换为 int。如果你使用

                int y=Integer.parseInt(x)
              

              你会得到一个 NumberFormatException 错误。

              我将字符串 x 转换为整数的操作首先是将字符串 x 中的每个单独的字符转换为 for 循环中的单个字符。

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

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

                String u=String.valueOf(t);
              

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

              Id figure Id post this,因为我花了一段时间才弄清楚如何将二进制(例如 01010101)转换为整数形式。

              【讨论】:

              • 意外的宝石出现在意外的地方!
              【解决方案26】:
              /**
               * @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 的整数数组。而不是将十进制转换为二进制。不是所要求的。
              【解决方案27】:

              在 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);
              }
              

              【讨论】:

              • 这会转换二进制整数,而不是十进制数。
              【解决方案28】:

              Integer.toBinaryString() 是一种内置方法,效果很好。

              【讨论】:

              • 需要注意的是,前导 0 已从输出中消除。
              • @tony9099 - 前导零被称为虚拟位。实际值不会有任何差异,您可以根据需要设置零。例如 - 二进制 111 或 00111 会给你相同的十进制数 7。
              猜你喜欢
              • 1970-01-01
              • 2020-04-03
              • 2012-06-26
              • 2015-06-02
              • 2011-07-09
              • 1970-01-01
              • 2021-01-29
              • 1970-01-01
              • 2014-10-29
              相关资源
              最近更新 更多