Ну, я уверен, что другие предложения работают, но я чувствую, что они будут работать очень медленно. На самом деле я не проверял никаких скоростей, но это должно быть очень быстро!
Это также на Java. Так что вам нужно конвертировать его.
public static int getPowerOfTwo(int size)
{
int n = -1;
while (size >> ++n > 0);
return (1 << n - 1 == size) ? size : 1 << n;
}
public static int getNextPowerOfTwo(int size)
{
int n = -1;
while (size >> ++n > 0);
return 1 << n;
}
public static int getPreviousPowerOfTwo(int size)
{
int n = -1;
while (size >> ++n > 0);
return 1 << n - 1;
}