Преобразование int в двоичное строковое представление в Java?

Каким будет лучший способ (в идеале, самый простой) преобразовать int в двоичное строковое представление в Java?

Например, предположим, что int равно 156. Его двоичным строковым представлением будет «10011100».


person Tyler Treat    schedule 09.03.2010    source источник


Ответы (15)


Также существует java.lang.Integer.toString (int i, int base), который был бы более подходящим, если бы ваш код мог однажды обрабатывать базы, отличные от 2 (двоичных). Имейте в виду, что этот метод дает вам только беззнаковое представление целого числа i, и если оно отрицательное, то впереди будет добавлен отрицательный знак. Он не будет использовать дополнение до двух.

person izilotti    schedule 15.12.2012

Еще один способ - используя java.lang.Integer вы можете получить строковое представление первого аргумента i в radix (Octal - 8, Hex - 16, Binary - 2), указанном вторым аргументом.

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

OutPut_

Binary eqivalent of 100 = 1100100
Octal eqivalent of 100 = 144
Decimal eqivalent of 100 = 100
Hexadecimal eqivalent of 100 = 64
person Rupesh Yadav    schedule 28.11.2014

Это то, что я написал несколько минут назад, просто теребя. Надеюсь, поможет!

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

}

person AbbyPaden    schedule 30.07.2015

Преобразование целого числа в двоичное:

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

person Sidarth    schedule 25.05.2016
comment
Чрезмерное продвижение определенного продукта / ресурса (который я здесь удалил) может быть воспринят сообществом как спам. Взгляните на справочный центр, особенно на Какие ожидается поведение пользователей? Последний раздел: Избегайте явного саморекламы. Возможно, вас также заинтересует Как разместить рекламу в Stack Overflow?. - person Tunaki; 25.05.2016

Используя встроенную функцию:

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());        
    }
}
person Rachit Srivastava    schedule 06.02.2016

Самый простой подход - проверить, нечетное ли число. Если это так, по определению, его крайнее правое двоичное число будет «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());
    }
}
person wild_nothing    schedule 26.07.2016
comment
На мой взгляд, это действительно элегантный способ сделать это вручную, если вы действительно не хотите использовать встроенные методы. - person praneetloke; 31.05.2018

вот мои методы, это немного убеждает, что количество байтов исправлено

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;
}
person Aleksey Timoshchenko    schedule 06.02.2017

Использование битового сдвига немного быстрее ...

public static String convertDecimalToBinary(int N) {

    StringBuilder binary = new StringBuilder(32);

    while (N > 0 ) {
        binary.append( N % 2 );
        N >>= 1;
     }

    return binary.reverse().toString();

}
person Edward J Beckett    schedule 14.09.2018

Это может быть выражено в псевдокоде как:

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
person amoljdv06    schedule 02.02.2017

Вам действительно стоит использовать 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);
}
person overthink    schedule 20.02.2018

Это должно быть довольно просто, примерно так:

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

}
person Sandeep Saini    schedule 24.10.2016

Вы также можете использовать цикл 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();
   }
}

Источник и ссылка - преобразовать int в двоичный в java пример.

person Shiva    schedule 18.11.2017

person    schedule
comment
Это удобно! Есть ли аналогичный способ для лонгов? - person Tyler Treat; 09.03.2010
comment
@ ttreat31: Я не хочу, чтобы это прозвучало резко, но вы действительно должны иметь под рукой документацию (в данном случае JavaDoc) всякий раз, когда вы занимаетесь программированием. Не нужно спрашивать: есть ли у них аналогичный метод для лонгов; вам нужно будет найти его, а не ввести комментарий. - person Lawrence Dol; 09.03.2010
comment
@Jack есть способ получить двоичную строку в фиксированном количестве бит, например, десятичный 8 в 8-битном двоичном формате, который 00001000 - person Kasun Siyambalapitiya; 06.06.2016

person    schedule
comment
Этот код не будет работать с отрицательными целыми числами. - person Lesya; 19.01.2021

person    schedule
comment
Результаты в двоичном формате = 0111 в двоичном формате = 111 - person Artavazd Manukyan; 24.05.2015
comment
Строка hexString = String.format (% 2s, Integer.toHexString (h)). Replace ('', '0'); - person Artavazd Manukyan; 30.09.2015