Binär in Bits umrechnen

KonradN

Super-Moderator
Mitarbeiter
Du bekommst ein int übergeben, also könntest Du hin gehen und die Anzahl der Bits von int nutzen.
Wenn nur positive Zahlen betrachtet werden sollen, dann wäre das Vorzeichenbit unnötig (also 1 Bit weniger).

Wenn die Anzahl der Bits stimmen soll, dann kannst Du
a) es natürlich programmatisch machen und es so einfach ermitteln.
b) Mathematisch - die Anzahl der Stellen kann man heraus bekommen. Dazu muss man sich nur erinnern, was denn so eine Binäre Zahl bedeutet:
die Stellen haben immer einen Wert von 2 hoch (Stelle - 1)
Bei 1000 dann ist das die 4te Stelle und damit den Wert von 2 hoch 3.
Wenn ich nun eine 1 nur mit 0er habe und das ist an Stelle x, dann ist es 2 hoch (x-1):
wert = 2 ^ (x-1)
Das kann man nach x umstellen - dazu dient der log2 ==> x-1 = log2(wert) ==> x = log2(wert)+1
Nun habe ich aber nicht nur 0er. Aber das führt dann nur zu nachkomma-Werten. Daher kann man dann einfach "abschneiden".

Jetzt muss man nur aufpassen: log2(1) = 0. Aber log2(0)? Das ist also ein Sonderfall, den man separat behandeln sollte.
 

KonradN

Super-Moderator
Mitarbeiter
Java:
System.out.println("Number of 1's bit are: " +Integer.bitCount(m));
Das ist nicht die Anzahl der Bits, die zur Darstellung benötigt werden sondern die Anzahl der 1en, die in der binären Darstellung vorkommen:
Returns the number of one-bits in the two's complement binary representation of the specified int value. This function is sometimes referred to as the population count.
 

Jw456

Top Contributor
Das ist nicht die Anzahl der Bits, die zur Darstellung benötigt werden sondern die Anzahl der 1en, die in der binären Darstellung vorkommen:

Ich dachte genau das wollte er na gut dann eben nicht .

Dann hatte er es eigentlich auch schon fast , er muss halt die Anzahlt der Durchgänge zählen.
Java:
  int m = 96;

        int z = 0;
        while (m != 0) {
            m = m / 2;
            z++;
        }
        System.out.println(z);
 
Zuletzt bearbeitet:

MarvinsDepression

Bekanntes Mitglied
oder so ...
Java:
int neededBits(int x) {
    for (int i = 31; i >= 0; i--) {
        if ((x & (1 << i)) != 0) return i + 1;
    }
    return 1; // für x = 0 opfere ich auch ein Bit
}
 

KonradN

Super-Moderator
Mitarbeiter
Also die Mathematische Lösung wäre (für positive Integer):
int requiredBits = (int) (Math.log(x)/Math,log(2) + 1)

Wenn man auch negative Integer betrachten möchte, dann würde noch ein Vorzeichen bit dazu kommen (also +2) und die benötigten Bits wären dann etwas wie:
Java:
int effectiveNumber = (number < 0) ? -number - 1 : number;
int bits = (int) (Math.log(effectiveNumber)/Math.log(2)) + 2;

Natürlich immer eine Prüfung auf 0 - wenn der Wert 0 ist, dann brauchen wir ohne Vorzeichen 1 Bit und mit Vorzeichen 2 Bit.
 

Neue Themen


Oben