Find which power of 2 range a number falls within? (In C)

c, exponent

Solution

What you're after is simply log2(n), as far as I can tell.

It might be worth cheating and using some inline assembly if your target architecture(s) have instructions that can do this. See the Wikipedia entry on "find first set" for lots of discussion and information about hardware support.

Problem

As in whether it falls within 2^3 - 2^4, 2^4 - 2^5, etc. The number returned would be the EXPONENT itself (minus an offset). How could this be done extremely quickly and efficiently as possible? This function will be called a lot in a program that is EXTREMELY dependent on speed. This is my current code but it is far too inefficient as it uses a for loop. ``` static inline size_t getIndex(size_t numOfBytes) { int i = 3; for (; i < 32; i++) { if (numOfBytes < (1 << i)) return i - OFFSET; } return (NUM_OF_BUCKETS - 1); } ``` Thank you very much!

Original source

Related problems