ある自然数以下で最も近い2の累乗(の指数)を求める
例. n = 35 → 32 (2の5乗) 答え: 5
解法1
2^m <= n < 2^(m+1)となるようなmを求める。
double n = 35d; double m = 0d; while (!(Math.pow(2, m) <= n && n < Math.pow(2, m + 1))){ m++; } System.out.println(m); // 5.0
解法2
nを二進数表示する。桁数 - 1が求めるmである。
int n = 35; String bin = Integer.toBinaryString(n); //100011 int len = bin.length(); System.out.println(len - 1); // 5