feed twitter facebook LinkedIn facebook

Java » Potencias del dos con desplazamiento de bits

Enero 27, 2009 por Víctor Cuervo . 5414 visitas 2 Comentarios Imprimir Imprimir

Hace unos días explicabamos el ejemplo de cómo obtener las potencias del dos con Java. Para ello nos apoyabamos sobre la clase Math y el método .pow.

Si bien, para el caso del número 2, y como nos comentaba Le Funes hay una forma de mostrar las potencias del dos con desplazamiento de bits. Y es que todo número tiene su representación en binario. Entendiendo que en el lenguaje binario se representa todo con ceros y unos.

Así la representación en binario del 1 es 1, la del 3 es 11, la de 8 es 1000, la del 9 es 1001,... Para calcular el número decimal de un número binario es tan sencillo como obtener la posición del número, empezando por la derecha como posición cero, elevar su valor a la potencia del 2 y sumar todos los números.

En el caso del 9 sería, que sería 1001, el calculo lo haríamos como:

  2^3 = 8
+ 2^0 = 1
---------
        9

Lo que vamos a hacer para nuestro ejemplo es apoyarnos en esta carácterística e ir desplazando un 1 hacía la izquierda. Algo como lo siguiente:

000001 = 1
000010 = 2
000100 = 4
001000 = 8
010000 = 16
100000 = 32

Para desplazar el bit a la izquierda lo hacemos con el operador de desplazamiento <<.

La operación sería de la siguiente manera:

1 << 1 // Para desplazar una posición
1 << 2 // Para desplazarlo dos posiciones
1 << 3 // Para desplazarlo tres posiciones
...

Asi que solo nos queda meterlo en un bucle para sacar todas las potencias del dos.

  1.  
  2. int iNumeroPotencias = 10;
  3.  
  4. for (int x=0;x<=iNumeroPotencias;x++)
  5. System.out.println("2 elevado a " + x + " igual a " + (1 << x));

Gracias a Le Funes por su colaboración...

Descargar el Codigo
Descargar el código
Error en el Codigo
Error en el código
tags: , , , ,

Artículos relacionados:

2 comentarios »

Redifusión RSS de los comentarios de la entrada. TrackBack URI

  1. Fhernd
    Marzo 31, 2009 #

    Excelente información. Me ha gustado su organización y claridad. Adelante!

  2. bLLANNCAAA
    Agosto 11, 2009 #

    import java.util.*;
    public class eje_1 {

    public eje_1() {
    }
    public static void main (String arg []){

    Scanner teclado=new Scanner (System.in);
    int n,p;

    System.out.print(“Introdusca un numero”);
    n=teclado.nextInt();
    System.out.print(“Introdusca la potencia”);
    p=teclado.nextInt();

    int resultado = 1;
    for(int i=0; i<p; i++)
    resultado = resultado * n;

    System.out.println("El resultado es igual="+resultado);

    }
    }

Deje un comentario

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*