Quickest way to find the most significant bit that is 1...
Anyone know what the quickest way to find which bit is the most significant bit that is 1?
For example, say the function I want has the prototype:
int MsbOn(unsigned long x);
MsbOn(1) returns 0
MsbOn(2) returns 1
MsbOn(3) returns 1
MsbOn(14) returns 3
MsbOn(15) returns 3
MsbOn(16) returns 4
MsbOn(20000) returns 14
The only thing I can think of is this:
#define LN2 (0.69314718055994530941723212145818)
int MsbOn(unsigned long x)
{
return (int)floor(log((double)x)/LN2);
}
But this uses floating point math. I'd like to see if there is a quicker, integer way of doing this.