On Sat, Oct 10, 2009 at 20:58, Matthias K. <maka...@googlemail.com> wrote: > On Sat, Oct 10, 2009 at 7:14 PM, David Emerson <dle...@angelbase.com> wrote: >> 2. For the purposes of reserving memory in block sizes that can be >> easily reallocated, I like to use powers of two. So if I have, e.g., a >> dynamic array, I might start with a size of 1024 and then double it >> when it hits capacity. Hopefully this smoothes memory management, as I >> am using a lot of memory... >> >> Anyway, what I'd like is a simple function that can quickly identify the >> next power-of-two larger than an arbitrary number. So if I feed the >> function 472, it will return 512. Thus far I haven't been able to >> figure out how to do this without a big if-then-else nest. Is there >> some clever way to request that the processor return the position of >> the leftmost '1' in 00101101? > > invalue := 412; > -- > outvalue := 1; > while invalue <> 0 do > begin > invalue := invalue div 2; > outvalue := outvalue*2; > end; > --
On x86 processors, there is bsr instruction which finds index of the most significant bit set. You just need some simple asm coding to use it. > regards, > Matthias > _______________________________________________ > fpc-pascal maillist - fpc-pas...@lists.freepascal.org > http://lists.freepascal.org/mailman/listinfo/fpc-pascal > -- Aleksa Todorovic - Lead Programmer Eipix Entertainment http://www.eipix.com/ _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal