Don P: Wie prüfe ich eine Zahl auf Zweierpotenz (2,4,8,16,...)?

Beitrag lesen

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