And if we weren't being literal-minded about the original request, it might make sense to just return the exponent rather than the power-of-2 itself, and let the caller worry about overflows:
static int ceilLog2(long val) {
return BigInteger.valueOf(val-1).bitLength();
}
Of course we are ignoring negative exponents, in the integer spirit of the original question.
If I were defensively programming against unanswerable input, I'd tend towards failing fast with a single early check:
If we needed to give answers for any size integer (or at least up to 2^(2^31-1)), we could use BigInteger, whose #bitLength method is useful: And if we weren't being literal-minded about the original request, it might make sense to just return the exponent rather than the power-of-2 itself, and let the caller worry about overflows: Of course we are ignoring negative exponents, in the integer spirit of the original question.There, is it done to death yet? :)