public static int log2(int x) { int y, v; // No log of 0 or negative if (x <= 0) { throw new System.ArgumentException("" + x + " <= 0"); } // Calculate log2 (it's actually floor log2) v = x; y = - 1; while (v > 0) { v >>= 1; y++; } return y; }