20 votos

Cómo encontrar el múltiplo de 16 más cercano a mi número dado n

Si me dan un número aleatorio de$n$ ¿Cuál sería el algoritmo para encontrar el número más cercano (que es mayor) y un múltiplo de 16?

Ejemplo$55$

El número más cercano sería$64$

Porque $16*4=64$

No$16*3=48$ porque es más pequeño que$55$.

27voto

Hagen von Eitzen Puntos 171160

Como seguramente está intentando hacer esto en un programa de computadora, pruebe la siguiente expresión C:$(x|15)+1$. Esto siempre aumentará, incluso si$x$ ya es un múltiplo de$16$.

O pruebe con$((x-1)|15)+1$ si no desea aumentar el número si ya es un múltiplo de$16$.

7voto

mblsha Puntos 305

Si usted está expresando el número en formato binario, se puede tirar de los últimos 4 bits y agregar uno y se multiplica por 16. Esto hace suponer que un múltiplo de 16, el número que desea es estrictamente mayor. Si en el caso donde n es un múltiplo de 16, la respuesta debe ser n, entonces se tendría que comprobar en primer lugar si los 4 últimos bits son cero.

Así, en el caso de los 55 que es 110111 en la base 2, esto entonces se convierte en 11 en la base 2, que es de 3 y, a continuación, la adición de uno le da 4 que 16 veces produce 64.


Hay Bitshift de operadores en C que podrían utilizarse de modo que usted puede tener una función que toma un parámetro, a continuación, realiza la siguiente serie de operaciones(a través de Rn es una sugerencia):

int a;
a = n-1;
a = a >> 4; /* which is the same as dividing by 16. */
a = a + 1;
return a << 4; /* which is the same as multiplying by 16 */

1voto

dtldarek Puntos 23441

Usando & bit Y deje que a = n & 15 , luego n - a + ((a+15) & 16) es lo que está buscando (puede generalizarse para cualquier$2^k$).

Espero que esto ayude ;-)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X