nächstes vielfaches von 8
-
ich suche eine möglichst elegante und effiziente möglichkeit eine zahl n ggf. zu erhöhen, so das sie anschließend ein vielfaches von 8 ist.
die zahl 12 soll auf 16 erhöht werden, 16 soll unverändert bleiben und 31 wird zu 32.
momentan mache ich es so:
uint32 n = ??; if (n % 8 > 0) { n += 8 - (n % 8); }gibt es eine elegantere lösung?
-
Sengha schrieb:
ich suche eine möglichst elegante und effiziente möglichkeit eine zahl n ggf. zu erhöhen, so das sie anschließend ein vielfaches von 8 ist.
die zahl 12 soll auf 16 erhöht werden, 16 soll unverändert bleiben und 31 wird zu 32.
unsigned next_multiple_of_eight(unsigned x) { return (x + 7u) & (~7u); }
-
Ich mach es immer so. Ist leicht nachvollziehbar (finde ich) und ist auch nicht konditional.
uint32 n = ??; n=(n+7)/8*8;Die Division und Multiplikation wird bei Zweierpotenzen wie 8 automatisch mit performanten Bitshifts realisiert.
-
int n = 31; n &= ~7; n += 8;Grüssli
-
Dravere schrieb:
int n = 31; n &= ~7; n += 8;nicht 100% korrekt. Probier mal n=16
-
kruemelkacker schrieb:
Dravere schrieb:
int n = 31; n &= ~7; n += 8;nicht 100% korrekt. Probier mal n=16
Krümelkacker du *g*
int n = 16; n += 7; n &= ~7;Zufrieden? Ich habe etwas zu schnell gedacht

Grüssli