Länge der in int verwendeten Bits abrufen

8

Wenn Sie die Binärzahl 10110 haben, wie kann ich 11111 zurückgeben? B. eine neue Binärzahl, die alle Bits nach der ersten 1 auf 1 setzt, gibt es einige ebenfalls unten aufgelistete Beispiele:

101 sollte 111 (3 Bit Länge) zurückgeben 011 sollte 11 zurückgeben (2 Bit Länge) 11100 sollte 11111 zurückgeben (5 Bit Länge) 101010101 sollte 111111111 (9 Bit Länge) zurückgeben

Wie kann dies am einfachsten in Java erreicht werden? Ich könnte mir einige Methoden einfallen lassen, aber sie sind nicht sehr "hübsch".

    
sigvardsen 23.05.2010, 13:39
quelle

4 Antworten

6

Sie könnten diesen Code verwenden:

%Vor%

Die Idee ist, dass die linke 1 zu allen Positionen auf der rechten Seite kopiert wird.

BEARBEITEN: Funktioniert auch mit einem negativen value . Wenn Sie int durch long ersetzen, fügen Sie eine zusätzliche |= -Anweisung hinzu: value |= (value >> 32) . Im Allgemeinen muss die letzte Verschiebung eine Potenz von 2 sein, die mindestens die Hälfte von value in Bits beträgt.

    
doublep 23.05.2010, 13:44
quelle
10

Mein Versuch: Integer.highestOneBit(b) * 2 - 1

    
hleinone 23.05.2010 13:58
quelle
6

Habe nicht getestet, aber so etwas sollte in Ordnung sein:

%Vor%     
Amadan 23.05.2010 13:44
quelle
0

Nicht sehr effizient, aber am einfachsten

%Vor%

Es wird für die ersten 31 Bit des int und ersten 63 Bit für lange arbeiten.

    
ZZ Coder 23.05.2010 13:54
quelle

Tags und Links