• Lunes 29 de Abril de 2024, 14:25

Autor Tema:  Comparar Bit a Bit  (Leído 4019 veces)

kurtjavier

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Comparar Bit a Bit
« en: Viernes 2 de Octubre de 2009, 21:44 »
0
Que tal todos, otra ves con una pequela duda.

Toy viendo unamateria se llama estructura de datos, donde en el taller varias veces el profesor nos ha mandado ha comparar bit a bit por ejemplo un entero (int), uno de los primeros talleres fue hacer eso y que imprimiera q dodne estuviera encendido (1) y * donde estuviera apagado el bit (0), la cuestion es que ni idea de como es la comparacion bit a bit, y ya tenemos como 4 meses con esa duda y bueno ayer me arme de valor jaja para preguntarle al profesor nadie habia querido porqu el profesor es algo exigente, y bueno me expico algo de comparar con and ( & )  mediante un for de la siguiente forma, coloco aqui un ejemplo sencillo como referencia:

Código: C++
  1.  
  2. #include<iostream>
  3. using namespace std;
  4.  
  5. void main()
  6. {
  7.     int i;
  8.     i=90;
  9.     for(int j=128;j>=1;j=j/2)
  10.     {
  11.         if((i&j)==1)
  12.             cout<<"Bit "<<j<<": 1"<<endl;
  13.         else
  14.             cout<<"Bit "<<j<<": 0"<<endl;
  15.     }
  16.     cin.get();
  17.     return;
  18. }
  19.  
  20.  

comienzo j en 128 para que vaya comparando el bit 128 para abajo con i, en la linea 11 hago la comparacion con el operador and verdad, si el bit 128 (la primera pasada) esta encendido el resultado de la evaluacion me devuelve 1 sino devuelve 0, la primera pasada esta bien pero la segunda pasada con j=64 deberia estar encendido ya que en i estoy guardando el valor 90 que seria 01011010 en memoria, pero dice que es 0 , segun lo que le entendi al profesor es asi como hago la comparacion pero no me da alguien me puede ayudar?, esto lo necesito porque horita hemos visto unos 3 talleres en relacion a esto y como no he sabido nada no he hecho mucho, y ya el ultimo taller nos toco compresion de archivos y no pude hacerlo tampoco, esta semana nos toca tabla hash y dijo que mandaria algo parecido y bueno creo ya es hora que busque y aprenda bien como es esto. Espero respuestas  :good:   gracias

kurtjavier

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Comparar Bit a Bit
« Respuesta #1 en: Viernes 2 de Octubre de 2009, 21:48 »
0
eyyy ya va , depurando el programa y guardando el resultado de la coparacion en un aux para ver que contenia me di cuenta de algo:

Código: C++
  1.  
  2. #include<iostream>
  3. using namespace std;
  4.  
  5. void main()
  6. {
  7.     int i,aux;
  8.     i=90;
  9.     for(int j=128;j>=1;j=j/2)
  10.     {
  11.         aux=(i&j);
  12.         if(aux==j)
  13.             cout<<"Bit "<<j<<": 1"<<endl;
  14.         else
  15.             cout<<"Bit "<<j<<": 0"<<endl;
  16.     }
  17.     cin.get();
  18.     return;
  19. }
  20.  
  21.  

resulta que si el bit esta encendido no me guarda uno sino que me guarda el valor del bit, x ejemplo el bit 64 eta encendido (recordando i=90 y en memoria es 01011010) entonces en aux me guarda 64, igual pasa con el 16 y los otros, entonces la cosa es que guarda el valor del bit si esta encendido sino guarda 0...... Bueno igual si conocen alguna mejor forma o tienen sugerencias diganlas sigo aqui practicando, suerte

disculpen si postie inneceariamente, no se me habia ocurrido hacer eso antes de haber postiado el mensaje.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Comparar Bit a Bit
« Respuesta #2 en: Viernes 2 de Octubre de 2009, 22:28 »
0
Código: C++
  1. if (i & j)
  2.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

epayan

  • Miembro activo
  • **
  • Mensajes: 41
  • Nacionalidad: mx
    • Ver Perfil
    • http://www.pillin-slk.blogspot.com
Re: Comparar Bit a Bit
« Respuesta #3 en: Viernes 2 de Octubre de 2009, 22:58 »
0
alguna vez hice algo asi , para manipular el puerto paralelo

donde el valor maximo era un byte o 11111111= 255
estoy en lo correcto?
si es asi
deberia ser de la siguiente manera:

1, 2 , 4 , 8 , 16, 36, 64, 128

de tal manera que empezaba por:

 if valor >= 128
  { valor = Valor - 128
   arregloposicion [8]=1;
  }

 y asi me voy con las demas posiciones

espero que sea eso a lo que te estes refiriendo, si no ignora este comentario

r0d

  • Miembro activo
  • **
  • Mensajes: 37
  • Nacionalidad: fr
    • Ver Perfil
    • http://r0d.developpez.com/index-es.php
Re: Comparar Bit a Bit
« Respuesta #4 en: Lunes 5 de Octubre de 2009, 09:45 »
0
Por si a caso: en c++ hay una classe estandar que sirve para la manipulacion de bits: std::bitset<T> (#include <bitset>)