Effiziente, nächste zeierpotenz herauszufinden
-
Hallo, ich bin relativ neu auf dem Gebiet der Bits and Bytes

Gibt es eine effektive Methode die nächste Zweierpotenz zu einer gegebenen Zahl herauszufinden?
Mein Ansatz sieht so aus, allerdings glaube ich, dass da noch mehr auszuholen ist:unsigned int zweierpotenz(unsigned int geg) { unsigned int mask = 1<<31; //nur das höchst wertigste bit ist gesetzt for(unsigned int i = 31; i; --i, mask>>=1) { if(geg&mask) return i; } return ~0; //geg == 0 }
-
Ob nächsthöhere oder nächsttiefere ist zunächst egal. da man ohne viel Aufwand aus der einen das andere bekommt.
Ich würde schauen, wie sich inline-assembler mit BSF oder BSR anfühlt.
Und bei Bitgefummele immer auf http://graphics.stanford.edu/~seander/bithacks.html schauen, ob da nicht was extrem cooles steht.
-
unsigned int zweierpotenz(unsigned int geg) { geg--; geg |= geg >> 1; geg |= geg >> 2; geg |= geg >> 4; geg |= geg >> 8; geg |= geg >> 16; geg++; return geg; }
-
Vielen Dank für den Link Volkard! Da stehen wirlich extrem interessante Beiträge
