Encuentra potencia siguiente y anterior de dos de un número dado en C ++

Aquí, vamos a aprender cómo encontrar la siguiente y anterior potencia de dos de un número determinado mediante el programa C ++ ?

Planteamiento del problema:

Buscar siguiente y el poder anterior de dos de un número dado

siguiente potencia de dos

    Example(1):
input: 22
output: 32 ( as 32 is 2^5)
Example(2):
input: 54
output: 64 (as 64 is 2^6)

potencia anterior de dos

    Example(1):
input: 22
output: 16
Example(2):
input: 54
output: 32

Podemos solucionar este problema mediante la manipulación de bits fácilmente.

Sólo echar un vistazo en la representación binaria del número que es una potencia de 2.

    power of 2           Binary Representation
1 1
2 10
4 100
8 1000
16 10000
32 100000
64 1000000
128 10000000

Como podemos ver todos los números tienen sólo su left Grupo bit más (es decir, 1) y el resto son unset (es decir, 0 ).

El Poder previa de 2

Si alguna manera, podemos desarmar todos los bits excepto el bit más a la izquierda en una representación binaria del número obtendremos el poder anterior de dos de número dado.

Ejemplo:

    Number           Binary representation          previous power of two
7 111 100 (i,e 4)
25 11001 10000 (i.e 16)
95 1011111 1000000 (i,e 64)

Utilizaremos operación (&) AND bit a bit para los bits claras.

Aquí es el algoritmo para obtener el poder anterior del 2 de n,

step 1: n = n & n-1
step 2: if n is power of two , n is our desired result,go to step 3.
else go to step 1.
step 3: print n and stop

Explicación:

let n   = 27 ( 11011 in binary)
n-1 = 26 ( 11010 in binary)
n&n-1 = 26
as 26 is not a power of 2 so we will repeat above step again
new n = 26
n = 26 ( 11010 in binary)
n-1 = 25 ( 11001 in binary)
n&n-1 = 24 ( 11000 in binary)
as 24 is not a power of 2 so we will repeat above step again
new n=24
n = 24 ( 11000 in binary)
n-1 = 23 ( 10111 in binary)
n&n-1 = 16 ( 10000 in binary)
as 16 is a power of 2 so this is our answer

Encontrar siguiente potencia de dos

Para obtener Después potencia de dos , todo lo que tenemos que hacer es encontrar un mayor número binario que el número dado que tiene establecido el bit más a la izquierda solamente.

Podemos usar el operador de desplazamiento a la izquierda (

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *