【问题标题】:Converting an int to a binary string representation in Java?将 int 转换为 Java 中的二进制字符串表示形式?
【发布时间】:2011-01-25 06:33:31
【问题描述】:

在 Java 中将 int 转换为二进制字符串表示形式的最佳方法(理想情况下,最简单)是什么?

例如,假设 int 是 156。它的二进制字符串表示将是“10011100”。

【问题讨论】:

    标签: java string binary int


    【解决方案1】:
    Integer.toBinaryString(int i)
    

    【讨论】:

    • 很方便!多头有类似的方法吗?
    • @ttreat31:我并不是说这听起来很刻薄,但是当您进行编程时,您确实应该随时准备好文档(在本例中为 JavaDoc)。你不应该问:他们是否有类似的多头方法?您应该查找它而不是输入评论。
    • @Jack 有没有办法以固定位数获取二进制字符串,例如 8 位二进制中的十进制 8,即 00001000
    【解决方案2】:

    还有java.lang.Integer.toString(int i, int base) 方法,如果您的代码有朝一日可能会处理2(二进制)以外的基数,则该方法会更合适。请记住,此方法只为您提供整数 i 的无符号表示,如果它是负数,它将在前面加上一个负号。它不会使用二进制补码。

    【讨论】:

      【解决方案3】:

      另一种方法-通过使用java.lang.Integer,您可以在第二个参数指定的radix (Octal - 8, Hex - 16, Binary - 2) 中获取第一个参数i 的字符串表示形式。

       Integer.toString(i, radix)
      

      例子_

      private void getStrtingRadix() {
              // TODO Auto-generated method stub
               /* returns the string representation of the 
                unsigned integer in concern radix*/
               System.out.println("Binary eqivalent of 100 = " + Integer.toString(100, 2));
               System.out.println("Octal eqivalent of 100 = " + Integer.toString(100, 8));
               System.out.println("Decimal eqivalent of 100 = " + Integer.toString(100, 10));
               System.out.println("Hexadecimal eqivalent of 100 = " + Integer.toString(100, 16));
          }
      

      输出_

      Binary eqivalent of 100 = 1100100
      Octal eqivalent of 100 = 144
      Decimal eqivalent of 100 = 100
      Hexadecimal eqivalent of 100 = 64
      

      【讨论】:

        【解决方案4】:
        public class Main  {
        
           public static String toBinary(int n, int l ) throws Exception {
               double pow =  Math.pow(2, l);
               StringBuilder binary = new StringBuilder();
                if ( pow < n ) {
                    throw new Exception("The length must be big from number ");
                }
               int shift = l- 1;
               for (; shift >= 0 ; shift--) {
                   int bit = (n >> shift) & 1;
                   if (bit == 1) {
                       binary.append("1");
                   } else {
                       binary.append("0");
                   }
               }
               return binary.toString();
           }
        
            public static void main(String[] args) throws Exception {
                System.out.println(" binary = " + toBinary(7, 4));
                System.out.println(" binary = " + Integer.toString(7,2));
            }
        }
        

        【讨论】:

        • 结果二进制 = 0111 二进制 = 111
        • String hexString = String.format("%2s", Integer.toHexString(h)).replace(' ', '0');
        【解决方案5】:

        这是我几分钟前写的东西,只是乱七八糟的。希望对您有所帮助!

        public class Main {
        
        public static void main(String[] args) {
        
            ArrayList<Integer> powers = new ArrayList<Integer>();
            ArrayList<Integer> binaryStore = new ArrayList<Integer>();
        
            powers.add(128);
            powers.add(64);
            powers.add(32);
            powers.add(16);
            powers.add(8);
            powers.add(4);
            powers.add(2);
            powers.add(1);
        
            Scanner sc = new Scanner(System.in);
            System.out.println("Welcome to Paden9000 binary converter. Please enter an integer you wish to convert: ");
            int input = sc.nextInt();
            int printableInput = input;
        
            for (int i : powers) {
                if (input < i) {
                    binaryStore.add(0);     
                } else {
                    input = input - i;
                    binaryStore.add(1);             
                }           
            }
        
            String newString= binaryStore.toString();
            String finalOutput = newString.replace("[", "")
                    .replace(" ", "")
                    .replace("]", "")
                    .replace(",", "");
        
            System.out.println("Integer value: " + printableInput + "\nBinary value: " + finalOutput);
            sc.close();
        }   
        

        }

        【讨论】:

          【解决方案6】:

          使用内置函数:

          String binaryNum = Integer.toBinaryString(int num);
          

          如果您不想使用内置函数将 int 转换为二进制,那么您也可以这样做:

          import java.util.*;
          public class IntToBinary {
              public static void main(String[] args) {
                  Scanner d = new Scanner(System.in);
                  int n;
                  n = d.nextInt();
                  StringBuilder sb = new StringBuilder();
                  while(n > 0){
                  int r = n%2;
                  sb.append(r);
                  n = n/2;
                  }
                  System.out.println(sb.reverse());        
              }
          }
          

          【讨论】:

            【解决方案7】:

            将整数转换为二进制:

            import java.util.Scanner;
            
            public class IntegerToBinary {
            
                public static void main(String[] args) {
            
                    Scanner input = new Scanner( System.in );
            
                    System.out.println("Enter Integer: ");
                    String integerString =input.nextLine();
            
                    System.out.println("Binary Number: "+Integer.toBinaryString(Integer.parseInt(integerString)));
                }
            
            }
            

            输出:

            输入整数:

            10

            二进制数:1010

            【讨论】:

            【解决方案8】:

            最简单的方法是检查数字是否为奇数。如果是,根据定义,其最右边的二进制数将是“1”(2^0)。确定这一点后,我们将数字右移并使用递归检查相同的值。

            @Test
            public void shouldPrintBinary() {
                StringBuilder sb = new StringBuilder();
                convert(1234, sb);
            }
            
            private void convert(int n, StringBuilder sb) {
            
                if (n > 0) {
                    sb.append(n % 2);
                    convert(n >> 1, sb);
                } else {
                    System.out.println(sb.reverse().toString());
                }
            }
            

            【讨论】:

            • 如果您真的不想使用内置方法,我认为这是一种非常优雅的手动操作方式。
            【解决方案9】:
            public static string intToBinary(int n)
            {
                String s = "";
                while (n > 0)
                {
                    s =  ( (n % 2 ) == 0 ? "0" : "1") +s;
                    n = n / 2;
                }
                return s;
            }
            

            【讨论】:

            • 此代码不适用于负整数
            【解决方案10】:

            这应该很简单:

            public static String toBinary(int number){
                StringBuilder sb = new StringBuilder();
            
                if(number == 0)
                    return "0";
                while(number>=1){
                    sb.append(number%2);
                    number = number / 2;
                }
            
                return sb.reverse().toString();
            
            }
            

            【讨论】:

              【解决方案11】:

              这可以用伪代码表示为:

              while(n > 0):
                  remainder = n%2;
                  n = n/2;
                  Insert remainder to front of a list or push onto a stack
              
              Print list or stack
              

              【讨论】:

                【解决方案12】:

                这是我的方法,有点说服字节数是固定的

                private void printByte(int value) {
                String currentBinary = Integer.toBinaryString(256 + value);
                System.out.println(currentBinary.substring(currentBinary.length() - 8));
                }
                
                public int binaryToInteger(String binary) {
                char[] numbers = binary.toCharArray();
                int result = 0;
                for(int i=numbers.length - 1; i>=0; i--)
                  if(numbers[i]=='1')
                    result += Math.pow(2, (numbers.length-i - 1));
                return result;
                }
                

                【讨论】:

                  【解决方案13】:

                  您也可以使用 while 循环将 int 转换为二进制。像这样,

                  import java.util.Scanner;
                  
                  public class IntegerToBinary
                  {
                     public static void main(String[] args)
                     {
                        int num;
                        String str = "";
                        Scanner sc = new Scanner(System.in);
                        System.out.print("Please enter the a number : ");
                        num = sc.nextInt();
                        while(num > 0)
                        {
                           int y = num % 2;
                           str = y + str;
                           num = num / 2;
                        }
                        System.out.println("The binary conversion is : " + str);
                        sc.close();
                     }
                  }
                  

                  来源和参考 - convert int to binary in java 示例。

                  【讨论】:

                    【解决方案14】:

                    您确实应该使用Integer.toBinaryString()(如上所示),但如果出于某种原因您想要自己的:

                    // Like Integer.toBinaryString, but always returns 32 chars
                    public static String asBitString(int value) {
                      final char[] buf = new char[32];
                      for (int i = 31; i >= 0; i--) {
                        buf[31 - i] = ((1 << i) & value) == 0 ? '0' : '1';
                      }
                      return new String(buf);
                    }
                    

                    【讨论】:

                      【解决方案15】:

                      使用位移会快一点...

                      public static String convertDecimalToBinary(int N) {
                      
                          StringBuilder binary = new StringBuilder(32);
                      
                          while (N > 0 ) {
                              binary.append( N % 2 );
                              N >>= 1;
                           }
                      
                          return binary.reverse().toString();
                      
                      }
                      

                      【讨论】:

                        【解决方案16】:
                        public class BinaryConverter {
                        
                            public static String binaryConverter(int number) {
                                String binary = "";
                                if (number == 1){
                                    binary = "1";
                                    return binary;
                                }
                                if (number == 0){
                                    binary = "0";
                                    return binary;
                                }
                                if (number > 1) {
                                    String i = Integer.toString(number % 2);
                        
                                    binary = binary + i;
                                    binaryConverter(number/2);
                                }
                                return binary;
                            }
                        }
                        

                        【讨论】:

                          【解决方案17】:

                          为了使其恰好是 8 位,我对@sandeep-saini 的回答做了一点补充:

                          public static String intToBinary(int number){
                                  StringBuilder sb = new StringBuilder();
                          
                                  if(number == 0)
                                      return "0";
                                  while(number>=1){
                                      sb.append(number%2);
                                      number = number / 2;
                                  }
                                  while (sb.length() < 8){
                                      sb.append("0");
                                  }
                          
                                  return sb.reverse().toString();
                          
                              }
                          

                          所以现在输入1 你会得到00000001 的输出

                          【讨论】:

                            【解决方案18】:
                            public static String intToBinaryString(int n) {
                                StringBuilder sb = new StringBuilder();
                                for (int i = 0; i < 32 && n != 0; i++) {
                                    sb.append((n&1) == 1 ? "1" : "0");
                                    n >>= 1;
                                }
                                return sb.reverse().toString();
                            }
                            

                            我们不能使用n%2 来检查第一位,因为它不适用于负整数。我们应该使用n&amp;1

                            【讨论】:

                              【解决方案19】:

                              如果int值为15,可以如下转换成二进制。

                              int x = 15;
                              
                              Integer.toBinaryString(x);
                              

                              如果你有二进制值,你可以将它转换成 int 值,如下所示。

                              String binaryValue = "1010";
                              
                              Integer.parseInt(binaryValue, 2);
                              

                              【讨论】:

                                【解决方案20】:

                                我的 2cents:

                                public class Integer2Binary {
                                    public static void main(String[] args) {
                                        final int integer12 = 12;
                                        System.out.println(integer12 + " -> " + integer2Binary(integer12));
                                        // 12 -> 00000000000000000000000000001100
                                    }
                                
                                    private static String integer2Binary(int n) {
                                        return new StringBuilder(Integer.toBinaryString(n))
                                            .insert(0, "0".repeat(Integer.numberOfLeadingZeros(n)))
                                            .toString();
                                    }
                                }
                                

                                【讨论】: