Imprima un número entero en formato binario en Java

277

Tengo un número y quiero imprimirlo en binario. No quiero hacerlo escribiendo un algoritmo, ¿hay alguna función incorporada para eso en Java?

akshayxyz
fuente

Respuestas:

434

Suponiendo que quiere decir "incorporado":

int x = 100;
System.out.println(Integer.toBinaryString(x));

Ver documentación entera .

( Longtiene un método similar, BigIntegertiene un método de instancia donde puede especificar la raíz).

Jon Skeet
fuente
2
Esto deja fuera los primeros 0's
Abu Ruqaiyah
1
@AbuRuqaiyah: El OP nunca mencionó los ceros iniciales, y necesitaríamos saber cuántos esperaban para una cosa ...
Jon Skeet
@AbuRuqaiyah Si desea los ceros a la izquierda, existe System.out.printf () que le brinda un gran control.
NomadMaker
246

Aquí no es necesario depender solo del formato binario o de otro tipo ... hay disponible una función integrada flexible que imprime el formato que desee en su programa. Integer.toString (int, representación);

Integer.toString(100,8) // prints 144 --octal representation

Integer.toString(100,2) // prints 1100100 --binary representation

Integer.toString(100,16) //prints 64 --Hex representation
Mohasin Ali
fuente
pruébelo con diferentes números, negativo, positivo, grande, pequeño
Tertium
8
toBinaryStringusa la salida complementaria de dos, toStringconvierte el número en la base especificada y pone un signo negativo al frente, entoncestoString(-8, 2) == "-1000"
Joe
66
System.out.println(Integer.toBinaryString(343));
adarshr
fuente
21

Necesitaba algo para imprimir bien las cosas y separar los bits cada n bits. En otras palabras, muestra los ceros a la izquierda y muestra algo como esto:

n = 5463
output = 0000 0000 0000 0000 0001 0101 0101 0111

Entonces esto es lo que escribí:

/**
 * Converts an integer to a 32-bit binary string
 * @param number
 *      The number to convert
 * @param groupSize
 *      The number of bits in a group
 * @return
 *      The 32-bit long bit string
 */
public static String intToString(int number, int groupSize) {
    StringBuilder result = new StringBuilder();

    for(int i = 31; i >= 0 ; i--) {
        int mask = 1 << i;
        result.append((number & mask) != 0 ? "1" : "0");

        if (i % groupSize == 0)
            result.append(" ");
    }
    result.replace(result.length() - 1, result.length(), "");

    return result.toString();
}

Invocarlo así:

public static void main(String[] args) {
    System.out.println(intToString(5463, 4));
}
Maghoumi
fuente
¿Por qué result.replace(result.length() - 1, result.length(), "");se requiere? Como estamos pasando, intque ya es de 32 bits. ¿Qué estamos reemplazando en la segunda última línea?
Parth
1
@Parth En cada paso, agregamos un carácter de espacio ("") al final de la cadena. La línea que mencionó eliminará el último carácter de espacio agregado. Esencialmente, podría llamar a la función de la Stringclase trimpara lograr el mismo efecto.
Maghoumi
Puede hacer esto de manera mucho más simple y eficiente agregando 0x100000000 al número, convirtiéndolo como un largo, y luego descartando el primer 1.
Marqués de Lorne
7

Vieja escuela:

    int value = 28;
    for(int i = 1, j = 0; i < 256; i = i << 1, j++)
        System.out.println(j + " " + ((value & i) > 0 ? 1 : 0));
David Williams
fuente
Pienso System.out.printlny estoy &integrado;)
David Williams
1
Acabo de darme cuenta de que he comentado después de 3 años de la respuesta ... jaja.
rajugaadu
7
public static void main(String[] args) 
{
    int i = 13;
    short s = 13;
    byte b = 13;

    System.out.println("i: " + String.format("%32s", 
            Integer.toBinaryString(i)).replaceAll(" ", "0"));

    System.out.println("s: " + String.format("%16s", 
            Integer.toBinaryString(0xFFFF & s)).replaceAll(" ", "0"));

    System.out.println("b: " + String.format("%8s", 
            Integer.toBinaryString(0xFF & b)).replaceAll(" ", "0"));

}

Salida:

i: 00000000000000000000000000001101
s: 0000000000001101
b: 00001101
Seyit Bilal
fuente
6

echa un vistazo a esta lógica puede convertir un número a cualquier base

public static void toBase(int number, int base) {
    String binary = "";
    int temp = number/2+1;
    for (int j = 0; j < temp ; j++) {
        try {
            binary += "" + number % base;

            number /= base;
        } catch (Exception e) {
        }
    }
    for (int j = binary.length() - 1; j >= 0; j--) {
        System.out.print(binary.charAt(j));
    }
}

O

StringBuilder binary = new StringBuilder();
int n=15;
while (n>0) {
    if((n&1)==1){
        binary.append(1);
    }else
        binary.append(0);
    n>>=1;
}
System.out.println(binary.reverse());
Zahid Ali
fuente
1
para la entrada como 0, `if (a == 0) {binary.append (0); System.out.println (binary.toString ()); regreso; } `necesitamos agregar esta línea en la segunda solución anterior mientras que el bucle.
Imran
4

Esta es la forma más sencilla de imprimir la representación binaria interna de un entero. Por ejemplo : si tomamos n como 17, la salida será: 0000 0000 0000 0000 0000 0000 0001 0001

void bitPattern(int n) {

        int mask = 1 << 31;
        int count = 0;
        while(mask != 0) {
            if(count%4 == 0)
                System.out.print(" ");

            if((mask&n) == 0) 

                System.out.print("0");



            else 
                System.out.print("1");


            count++;
            mask = mask >>> 1;


    }
    System.out.println();
}
shoaib Khan
fuente
4

Simplemente inténtalo. Si el alcance solo imprime los valores binarios del valor entero dado. Puede ser positivo o negativo.

      public static void printBinaryNumbers(int n) {
        char[] arr = Integer.toBinaryString(n).toCharArray();
        StringBuilder sb = new StringBuilder();
        for (Character c : arr) {
          sb.append(c);
        }
        System.out.println(sb);
      }

entrada

5 5

Salida

101

Ganesa Vijayakumar
fuente
2

Solución con máscara de pantalla de 32 bits,

public static String toBinaryString(int n){

    StringBuilder res=new StringBuilder();
    //res= Integer.toBinaryString(n); or
    int displayMask=1<<31;
    for (int i=1;i<=32;i++){
        res.append((n & displayMask)==0?'0':'1');
        n=n<<1;
        if (i%8==0) res.append(' ');
    }

    return res.toString();
}


 System.out.println(BitUtil.toBinaryString(30));


O/P:
00000000 00000000 00000000 00011110 
dhanu10896
fuente
2

Solución simple y bastante fácil.

public static String intToBinaryString(int integer, int numberOfBits) {

    if (numberOfBits > 0) {     // To prevent FormatFlagsConversionMismatchException.

        String nBits = String.format("%" + numberOfBits + "s",      // Int to bits conversion
                Integer.toBinaryString(integer))
                .replaceAll(" ","0"); 

        return nBits;   // returning the Bits for the given int.
    }

    return null;        // if the numberOfBits is not greater than 0, returning null.
}
Jack Reez
fuente
1

Ya hay buenas respuestas publicadas aquí para esta pregunta. Pero, esta es la forma en que lo intenté yo mismo (y podría ser la lógica más fácil basada en → módulo / dividir / agregar ):

        int decimalOrBinary = 345;
        StringBuilder builder = new StringBuilder();

        do {
            builder.append(decimalOrBinary % 2);
            decimalOrBinary = decimalOrBinary / 2;
        } while (decimalOrBinary > 0);

        System.out.println(builder.reverse().toString()); //prints 101011001

fuente
0

La pregunta es complicada en Java (y probablemente también en otro idioma).

Un entero es un tipo de datos con signo de 32 bits , pero Integer.toBinaryString () devuelve una representación de cadena del argumento entero como un entero sin signo en la base 2.

Entonces, Integer.parseInt (Integer.toBinaryString (X), 2) puede generar una excepción (con y sin signo).

La forma segura es usar Integer.toString (X, 2); esto generará algo menos elegante:

-11110100110

¡¡¡Pero funciona!!!

ninja
fuente
Quiere imprimirlo, no analizarlo.
Marqués de Lorne
System.out.println (Integer.toString (X, 2));
ninja
0

Creo que es el algoritmo más simple hasta ahora (para aquellos que no quieren usar funciones integradas):

public static String convertNumber(int a)  { 
              StringBuilder sb=new StringBuilder();
              sb.append(a & 1);
              while ((a>>=1) != 0)  { 
                  sb.append(a & 1);
               }
              sb.append("b0");
              return sb.reverse().toString();
  }

Ejemplo:

convertNumber (1) -> "0b1"

convertNumber (5) -> "0b101"

convertNumber (117) -> "0b1110101"

Cómo funciona: while-loop mueve un número a la derecha (reemplazando el último bit por el penúltimo, etc.), obtiene el valor del último bit y lo coloca en StringBuilder, se repite hasta que no queden bits (eso es cuando a = 0).

analizador
fuente
0
    for(int i = 1; i <= 256; i++)
    {
        System.out.print(i + " "); //show integer
        System.out.println(Integer.toBinaryString(i) + " "); //show binary
        System.out.print(Integer.toOctalString(i) + " "); //show octal
        System.out.print(Integer.toHexString(i) + " "); //show hex

    }
mozo de labranza
fuente
3
Muchas gracias por la respuesta, sin embargo, agregue más descripción y / o información y cómo resuelve el problema solicitado para que otros puedan entenderlo fácilmente sin pedir aclaraciones :)
koceeng
0

Intenta de esta manera:

public class Bin {
  public static void main(String[] args) {
    System.out.println(toBinary(0x94, 8));
  }

  public static String toBinary(int a, int bits) {
    if (--bits > 0)
        return toBinary(a>>1, bits)+((a&0x1)==0?"0":"1");
    else 
        return (a&0x1)==0?"0":"1";
  }

}

10010100

pengguang001
fuente
0

Representación binaria de int x dada con ceros rellenos a la izquierda:

org.apache.commons.lang3.StringUtils.leftPad(Integer.toBinaryString(x), 32, '0')
ankitkpd
fuente
0

Ingrese cualquier número decimal como entrada. Después de eso, operamos como módulo y división para convertir la entrada dada en un número binario. Aquí está el código fuente del programa Java para convertir valores enteros en binario y el número de bits de este binario para su número decimal. El programa Java se compiló y ejecutó con éxito en un sistema Windows. La salida del programa también se muestra a continuación.

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int integer ;
        String binary = "";    //   here we count "" or null 
                               //   just String binary = null;
        System.out.print("Enter the binary Number: ");
        integer = sc.nextInt();

        while(integer>0)
        {
            int x = integer % 2;
            binary = x + binary;
            integer = integer / 2;  
        }
        System.out.println("Your binary number is : "+binary);
        System.out.println("your binary length : " + binary.length());
    }
}
Md. Tarikul Islam
fuente
0

Como no se acepta ninguna respuesta, tal vez su pregunta fue sobre cómo almacenar un número entero en un archivo binario. java.io.DataOutputStream puede ser lo que estás buscando: https://docs.oracle.com/javase/8/docs/api/java/io/DataOutputStream.html

DataOutputStream os = new DataOutputStream(outputStream);
os.writeInt(42);
os.flush();
os.close();
Christian Charbula
fuente
2
La mayoría de las veces, imprimir significa escribir algo en la consola, no almacenarlo en un archivo. Su respuesta podría ser útil si se le pide que serialice datos en un archivo.
Alain-Michel Chomnoue N
Por supuesto, pero dado que el autor de la pregunta no acepta ninguna de las respuestas, supuse que su pregunta era inexacta.
Christian Charbula
0

¡Puede usar la máscara de bits (1 << k) y hacer la operación AND con el número! 1 << k tiene un bit en la posición k!

private void printBits(int x) {
    for(int i = 31; i >= 0; i--) {
        if((x & (1 << i)) != 0){
            System.out.print(1);
        }else {
            System.out.print(0);
        }
    }
    System.out.println();
}
parveen
fuente
-2

Funciona con valores con y sin signo, utiliza una potente manipulación de bits y genera los primeros ceros a la izquierda.

public static String representDigits(int num) {

        int checkBit = 1 << (Integer.SIZE * 8 - 2 );    // avoid the first digit        
        StringBuffer sb = new StringBuffer();

        if (num < 0 ) {     // checking the first digit
            sb.append("1");
        } else {
            sb.append("0");
        }

        while(checkBit != 0) {          
            if ((num & checkBit) == checkBit){
                sb.append("1");
            } else {
                sb.append("0");
            }           
            checkBit >>= 1;     
        }       

        return sb.toString();
    }
Róbert Kovács
fuente