Prossima potenza di 2 per un numero (in cerca di un modo migliore di "bit-twiddling")

1

Mi chiedo solo se esiste un modo migliore (cioè più veloce?) per ottenere il prossimo potenza di 2 per un dato numero rispetto al seguente (forse alcuni meglio una sorta di hack "bit-twiddling" è possibile?) ...

static size_t
npow2(size_t n)
{
        n--;
        n |= n >> 1;
        n |= n >> 2;
        n |= n >> 4;
        n |= n >> 8;
        n |= n >> 16;
        return n + 1;
}

Grazie per le tue idee.

    
posta mjf 06.02.2014 - 15:42
fonte

1 risposta

2

Secondo la raccolta di Bit Twiddling Hacks di Sean Eron Anderson, questo è probabilmente il modo più veloce.

Le alternative sono un hack float IEEE, che comporta meno operazioni C ma finisce più lentamente, e utilizza direttamente l'istruzione della macchina x86 BSR (bit scan reverse), ma nei test di Anderson che non sono finiti molto più velocemente del sopra OR-ing trick.

    
risposta data 06.02.2014 - 16:10
fonte

Leggi altre domande sui tag