Log2(x) is just the opposite of 2^x. So where 2^x is just "1 shifted left x times", log2(x) is just "the position of the left-most 1". E.g.:
log2(00000001b) = 0 ('b' suffix means binary here)
log2(00000100b) = 2
log2(10000000b) = 7
For numbers which aren't powers of 2, you must decide whether to round to the nearest integer or just round down. Rounding down is much easier

. In which case:
log2(00000111b) = 2
Then your code will look something like this:
int log2 = 0;
while (x > 1) {
log2++;
x >>>= 1;
}
Note that I'm assuming x is positive! Negative numbers or zero would be invalid arguments for a log2 method.
If you're emulating fixed point (e.g. by storing all numbers << 8 ) then just subtract the number of fractional binary digits (e.g. 8 ) from the result of log2.