Well, the answer is pretty simple. If you have an int value:
int log2(int value) {
return Integer.SIZE-Integer.numberOfLeadingZeros(value);
}
The same exists for Long...
[Edit]
If shaving milliseconds is an issue here, Integer.numberOfLeadingZeros(int) is reasonably efficient, but still does 15 operations... Expanding a reasonable amount of memory (300 bytes, static) you could shave that to between 1 and 8 operations, depending on the range of your integers.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…