将 int 转换为 Java 中的二进制字符串表示形式?

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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

【讨论】:

过度宣传特定产品/资源(我在此处删除)可能会被社区视为垃圾邮件。看看help center,特别是What kind of behavior is expected of users? 的最后一部分:避免公开的自我推销。您可能还对How do I advertise on Stack Overflow? 感兴趣。【参考方案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();
    

【讨论】:

以上是关于将 int 转换为 Java 中的二进制字符串表示形式?的主要内容,如果未能解决你的问题,请参考以下文章

C# Json 将十六进制文字字符串转换为 int

高手请进!如何把整形数据转换为字符串(C语言)?

Python - 如何将 int 转换为表示 32 位十六进制数的字符串

float型怎样强制转换成int型

python各数据类型及内置方式:

如何将string类型的数字转换成int