Trick: FFT Laenge mit einer Anweisung vergessen
-
Kennt einer den Trick, wie man zu einer vorgegeben Wert die nächst
mögliche 2 Hoch n Zahl findet unzwa mit Bit-Arithmetik. (manchmal bei FFT's wichtig)Beispiele:
31 => 32
32 => 32
33 => 64
..,Also nicht mit einer For-Schleife oder so.
Ich weiss dass man dies sehr einfach mit einer for-Schleife tun kann.Will aber den genialen Trick wieder wissen. (Es gibt ihn auch)
-
-
Mit Shift-Operatoren könntest du das machen.
int i = 31; int x = 1; while(x<i) x=x<<1;
-
keine while Scheifen oder mehrere Anweisungen hintereinander!
war irgend etwas wie
n = i<<1 & (i-1);
oder so.
-
Also Testen ob es eine ist geht so
(x & (x − 1)) != 0
und die nächste ermitteln mit mehreren Anweisungen geht so
n = n - 1;
n = n | (n >> 1);
n = n | (n >> 2);
n = n | (n >> 4);
n = n | (n >> 8);
n = n | (n >> 16);
...
n = n | (n >> (bitspace / 2));
n = n + 1;Na ja
vielleich gibt es das gleiche nicht als Einzeiler.