2011-10-07 18 views
7

Duplicar posible:
bit twiddling: find next power of two¿Cómo obtener la próxima potencia de dos de un número determinado?

de cómo obtener la siguiente potencia de dos de un número dado?

Por ejemplo, recibo el número 138, el siguiente número es 256. POT

recibo el número 112, el siguiente POT es 128.

Necesito hacer un algoritmo que calcula que

Gracias

+1

Esto es tarea, ¿no? Debe etiquetar la tarea como tal. – Marcin

+7

¿Por qué 256 en lugar de 128 el próximo POT para 112? – sth

Respuesta

15

Un programador realmente inteligente sería mirar el método java.lang.Integer.highestOneBit(int), y considerar el operador de desplazamiento a la izquierda (<<).

+1

+1; ¡No sabía que ese método existía! –

+3

Falta una fórmula concreta. Suponiendo que la siguiente potencia de dos de 128 es 128, ¿qué pasa con 'Math.max (1, Integer.highestOneBit (i - 1) << 1)'? –

5

Suponiendo que la entrada es un entero positivo, una solución poco convencional sería mirar el patrón de bits del número. Encuentra el primer '1' de la izquierda, luego piensa en el valor del bit a la izquierda de eso.

+0

¿me puede explicar cómo hacerlo, por favor? – NullPointerException

6

Aquí es un algoritmo muy simple (ya que esta es la tarea, usted tiene que codificar tú mismo):

  1. de inicio con 1 como primera potencia candidato de dos.
  2. Siga moviendo el número candidato en un bit hacia la izquierda hasta que sea mayor o igual que el número objetivo.
Cuestiones relacionadas