Java: Zweierpotenz prüfen und finden?

Wie ist es möglich zu prüfen, ob eine gegebene Zahl eine Zweierpotenz ist? Also 2, 4, 8, 16 etc!
Und wie ist es möglich mit Java die nächste Zweierpotenz einer Zahl zu finden. Also zu 31 sollte 32 ausgeben werden, zu 924 1024 etc! Danke für eure Antworten!

2009-05-11T13:19:17Z

"Du suchst das höchste 1er Bit, setzt das nächsthöhere und löscht alle anderen."

Da hab ich noch Probleme damit.. Weiß nicht genau wie ich das anstellen sollte?!

2009-05-11T14:23:35Z

ok.. kam doch drauf! Danke

ridikuel2009-05-11T12:38:09Z

Beste Antwort

Generell musst Du bei einer Integer Zahl nur in Bitdarstellung die Einsen zählen. Wenn Du genau eine 1 zählst, ist es eine 'Zweierpotenz'.

Und, die nächste Zweierpotenz zu finden, ist auch nicht so schwierig. Du suchst das höchste 1er Bit, setzt das nächsthöhere und löscht alle anderen.

Wie man das genau in Java macht:
Das Zählen der Bits macht: java.lang.Integer.bitCount(int i)
Außerdem bietet java.lang.Integer die static Methode highestOneBit(int i).
Wenn also bitCount mehr als 1 ausgibt, gibst Du (highestOneBit()+1)^2 aus.