SoloCodigo

Programación General => Pascal => Mensaje iniciado por: manduchina en Viernes 11 de Enero de 2008, 20:11

Título: De Numero A Numero De Bits
Publicado por: manduchina en Viernes 11 de Enero de 2008, 20:11
Hola!
Soy nueva en pascal y quería saber si existe alguna función que pasandóle un número (integer) te devolviera el número de bits q se necesitan xa su representación.

Si no, si me pudieran dar un poco de ayuda xa desarrollarlo yo habia pensado en dividir x dos hasta q el resultado fuera 0, cogiendo solo la parte entera, saben q función existe xa esto? e incrementar un contador, pero no se si habrá una manera más facillilla.

Gracias x anticipado.

Saludos
Título: Re: De Numero A Numero De Bits
Publicado por: Amilius en Sábado 12 de Enero de 2008, 04:33
Tomando en cuenta que tratamos solo con enteros positivos, lo de dividir por dos es buena idea, además existe el operador de desplazamiento a izquierda que permite dividir entre potencias de 2 siempre que X sea entero positivo:

Por ejemplo X shl 1 equivale a X div 2.

Pero también sería suficiente esta función:

Bits:=Trunc( log2((Numero shl 1)+1) );

No recuerdo si en pascal estándar tienes el logaritmo en base 2, pero si tienes ln puedes obtener el log2 con esta ecuación:
log2(x)=(ln(x)/ln(2))

O también:

Código: Text
  1.  
  2. BitsNecesarios:=0;
  3. While (Numero>0) do
  4. begin
  5.    Numero:=Numero shr 1;{Dividir entre dos}
  6.    Inc(BitsNecesarios);{incrementar en 1}
  7. end;
  8. result:=BitsNecesarios;
  9.  
  10.  
Título: Re: De Numero A Numero De Bits
Publicado por: manduchina en Sábado 12 de Enero de 2008, 09:37
Muchas gracias!!!