Drucken Sie eine Ganzzahl im Binärformat in Java

276

Ich habe eine Nummer und möchte sie binär ausdrucken. Ich möchte es nicht tun, indem ich einen Algorithmus schreibe. Gibt es eine integrierte Funktion dafür in Java?

akshayxyz
quelle

Antworten:

433

Angenommen, Sie meinen "eingebaut":

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

Siehe Integer-Dokumentation .

( Longhat eine ähnliche Methode, BigIntegerhat eine Instanzmethode, mit der Sie den Radix angeben können.)

Jon Skeet
quelle
2
Dies lässt die führenden
Nullen
1
@AbuRuqaiyah: Das OP erwähnte nie führende Nullen, und wir müssten wissen, wie viele sie für eine Sache erwartet haben ...
Jon Skeet
@AbuRuqaiyah Wenn Sie führende Nullen möchten, gibt es System.out.printf (), das Ihnen viel Kontrolle gibt.
NomadMaker
246

Hier müssen Sie sich nicht nur auf ein Binärformat oder ein anderes Format verlassen ... es steht eine flexible integrierte Funktion zur Verfügung, die das gewünschte Format in Ihrem Programm ausgibt. Integer.toString (int, Darstellung);

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
quelle
Testen Sie es mit verschiedenen Zahlen, negativ, positiv, groß, klein
Tertium
8
toBinaryStringverwendet die Zweierkomplementausgabe, toStringverdeckt die Zahl der angegebenen Basis und setzt ein negatives Vorzeichen vor, alsotoString(-8, 2) == "-1000"
Joe
66
System.out.println(Integer.toBinaryString(343));
adarshr
quelle
21

Ich brauchte etwas, um die Dinge schön auszudrucken und die Bits jedes n-Bit zu trennen. Mit anderen Worten, zeigen Sie die führenden Nullen an und zeigen Sie ungefähr Folgendes:

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

Also hier ist was ich geschrieben habe:

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

Rufen Sie es so auf:

public static void main(String[] args) {
    System.out.println(intToString(5463, 4));
}
Maghoumi
quelle
Warum result.replace(result.length() - 1, result.length(), "");ist erforderlich? Während wir vorbeikommen int, ist das schon 32-Bit. Was ersetzen wir in der vorletzten Zeile?
Parth
1
@Parth Bei jedem Schritt fügen wir ein Leerzeichen ("") an das Ende der Zeichenfolge an. In der von Ihnen erwähnten Zeile wird das zuletzt angehängte Leerzeichen entfernt. Im Wesentlichen können Sie Stringdie trimFunktion der Klasse aufrufen , um den gleichen Effekt zu erzielen.
Maghoumi
Sie können dies viel einfacher und effizienter tun, indem Sie der Zahl 0x100000000 hinzufügen, sie als Long konvertieren und dann die führende 1 verwerfen.
Marquis of Lorne
7

Alte Schule:

    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
quelle
Ich denke System.out.printlnund bin &eingebaut;)
David Williams
1
habe gerade gemerkt, dass ich nach 3 Jahren der Antwort kommentiert habe ... lol.
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"));

}

Ausgabe:

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

Schauen Sie sich diese Logik an, um eine Zahl in eine beliebige Basis umzuwandeln

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

ODER

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
quelle
1
für die Eingabe als 0 `if (a == 0) {binary.append (0); System.out.println (binary.toString ()); Rückkehr; } `Wir müssen diese Zeile in der zweiten Lösung oben während der Schleife hinzufügen.
Imran
4

Dies ist die einfachste Methode zum Drucken der internen Binärdarstellung einer Ganzzahl. Zum Beispiel : Wenn wir n als 17 nehmen, lautet die Ausgabe: 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
quelle
4

Probieren Sie es einfach aus. Wenn der Bereich nur die Binärwerte des angegebenen ganzzahligen Werts druckt. Es kann positiv oder negativ sein.

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

Eingang

5

Ausgabe

101

Ganesa Vijayakumar
quelle
2

Lösung mit 32-Bit-Anzeigemaske,

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
quelle
2

Einfache und ziemlich einfachste Lösung.

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
quelle
1

Hier gibt es bereits gute Antworten auf diese Frage. Aber so habe ich es selbst versucht (und es könnte die einfachste logikbasierte sein → modulo / dividieren / addieren ):

        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

quelle
0

Die Frage ist in Java (und wahrscheinlich auch in einer anderen Sprache) schwierig.

Eine Ganzzahl ist ein vorzeichenbehafteter 32-Bit- Datentyp, aber Integer.toBinaryString () gibt eine Zeichenfolgendarstellung des Ganzzahlarguments als vorzeichenlos zurück Ganzzahl in Basis 2 zurück.

Integer.parseInt (Integer.toBinaryString (X), 2) kann also eine Ausnahme generieren (signiert oder nicht signiert).

Der sichere Weg ist die Verwendung von Integer.toString (X, 2); Dies wird etwas weniger Elegantes erzeugen:

-11110100110

Aber es funktioniert!!!

Ninja
quelle
Er will es drucken, nicht analysieren.
Marquis von Lorne
System.out.println (Integer.toString (X, 2));
Ninja
0

Ich denke, es ist der bisher einfachste Algorithmus (für diejenigen, die keine integrierten Funktionen verwenden möchten):

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

Beispiel:

convertNumber (1) -> "0b1"

convertNumber (5) -> "0b101"

convertNumber (117) -> "0b1110101"

So funktioniert es: while-Schleife verschiebt eine Zahl nach rechts (Ersetzen des letzten Bits durch vorletztes Bit usw.), ruft den Wert des letzten Bits ab und legt ihn in StringBuilder ab. Wiederholt, bis keine Bits mehr vorhanden sind (dann a = 0).

Parsecer
quelle
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

    }
Pflüger
quelle
3
Vielen Dank für die Antwort, aber bitte fügen Sie weitere Beschreibungen und / oder Informationen hinzu und wie es das gestellte Problem löst, damit andere es leicht verstehen können, ohne um Klarstellung zu bitten :)
koceeng
0

Versuchen Sie Folgendes:

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
quelle
0

Binäre Darstellung des gegebenen int x mit links aufgefüllten Nullen:

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

Geben Sie eine beliebige Dezimalzahl als Eingabe ein. Danach arbeiten wir wie Modulo und Division, um die angegebene Eingabe in eine Binärzahl umzuwandeln. Hier ist der Quellcode des Java-Programms zum Konvertieren von Ganzzahlwerten in Binärwerte und die Bitnummer dieser Binärzahl für seine Dezimalzahl. Das Java-Programm wurde erfolgreich kompiliert und auf einem Windows-System ausgeführt. Die Programmausgabe wird auch unten gezeigt.

    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
quelle
0

Da keine Antwort akzeptiert wird, war Ihre Frage möglicherweise, wie eine Ganzzahl in einer Binärdatei gespeichert werden kann. java.io.DataOutputStream könnte das sein, wonach Sie suchen: 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
quelle
2
Meistens bedeutet Drucken, etwas in die Konsole zu schreiben und nicht in einer Datei zu speichern. Ihre Antwort kann hilfreich sein, wenn Sie aufgefordert werden, Daten in eine Datei zu serialisieren.
Alain-Michel Chomnoue N
Natürlich, aber da der Fragesteller keine der Antworten akzeptiert, habe ich vermutet, dass seine Frage ungenau war.
Christian Charbula
0

Sie können die Bitmaske (1 << k) verwenden und eine UND-Operation mit der Nummer ausführen! 1 << k hat ein Bit an k Position!

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
quelle
-2

Es funktioniert mit vorzeichenbehafteten und vorzeichenlosen Werten, die eine leistungsstarke Bitmanipulation verwenden, und generiert die ersten Nullen auf der linken Seite.

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
quelle