Hallo Længlich,
Voghdzuyin!
Wieso denn Bahnhof? ;-)
Anscheinend liest der OP nicht mehr mit, er war ja schon gestern mit ceil(log($xx, 2)) als Test auf Zweierpotenzen zufrieden. Das hält uns aber nicht davon ab, noch bessere Lösungen zu finden, gelle :-)
Dein Ansatz ist sicher bis jetzt der einfachste.
Wenn es auf Performance ankommt, ist
function naechsteZweierPotenz( $n ) {
if ( !(($n-1)&$n) ) return $n;
$p = 1;
while ( ($n-1)&$n ) {$n >>= 1;
$p++;
}return $n << $p;
}
aber wohl kaum zu schlagen. Habe das in JavaScript umgesetzt und ausprobiert: Funktioniert einwandfrei. Für PHP habe ich jetzt leider keine Testmöglichkeit.
Es gelten in etwa die gleichen Einschränkungen:
- Die übergebene Zahl muss Integer und >0 sein
- Die nächsthöhere Zweierpotenz muss darstellbar sein
Gruß, Don P