2011-10-07 3 views
7

Eventuali duplicati:
bit twiddling: find next power of twoCome ottenere il prossimo Power Of Two di un dato numero?

Come ottenere la successiva potenza di due di un dato numero?

Ad esempio, viene visualizzato il numero 138, il numero POT successivo è 256.

ricevo il numero 112, il successivo POT è 128.

devo fare un algoritmo che calcola che

Grazie

+1

Questo è compito, vero? Devi taggare i compiti come tali. – Marcin

+7

Perché 256 anziché 128 il prossimo POT per 112? – sth

risposta

15

Un programmatore davvero intelligente guarderebbe il metodo java.lang.Integer.highestOneBit(int) e considererà l'operatore di spostamento a sinistra (<<).

+1

+1; non sapevo che esistesse un metodo! –

+3

Manca una formula concreta. Supponendo che la potenza successiva di due di 128 sia 128, allora che ne dite di 'Math.max (1, Integer.highestOneBit (i - 1) << 1)'? –

5

Supponendo che l'input sia un numero intero positivo, una soluzione non convenzionale sarebbe esaminare il modello di bit del numero. Trova il primo '1' da sinistra, poi pensa al valore del bit a sinistra di quello.

+0

puoi spiegarmi come farlo per favore? – NullPointerException

6

Ecco un algoritmo molto semplice (poiché questo è compiti a casa, dovrete codice su voi stessi):

  1. Inizia con 1 come la prima potenza candidato di due.
  2. Continua a spostare il numero di candidato di un bit verso sinistra finché non è maggiore o uguale al numero di destinazione.
Problemi correlati