¿¿¿Como saber si ciertos bits están activados??

Iniciado por harry_the_blogger, 2 Octubre 2014, 02:37 AM

0 Miembros y 1 Visitante están viendo este tema.

harry_the_blogger

Hola, estoy creando un programa que necesita identificar un cierto patron de bits al inicio del byte. Por ejemplo: Si byte comienza con 10100xxx, ir al codigo tal.

Espero que haya explicado bien mi problema. La idea es saber si ciertos bits dentro de un byte están activados, e ignorar el resto. No sé como lograr eso. Quiero lograr comparar, por ejemplo, los primeros cinco bits contra un patron conocido. No quiero identificar solo un bit, quiero identificar un grupo de ellos.

Gracias por su ayuda.
Vista mi blog es enriquemesa.blogspot.com

engel lex

puedes hacer una operacion a nivel de bits, ej

a= 41248 & B1010000000000000//40960
eso debería devolverte 40960 que es el valor equivalente en binario
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

harry_the_blogger

Oye, ¿¿podrías explicarme con un ejemplo en C/C++?? Es que no tengo muy claro como podría colocar eso dentro de un if (en otras palabras, no entiendo como eso disparará el if solo cuando cierto patron de bits estén al comienzo del byte)

Vista mi blog es enriquemesa.blogspot.com

engel lex

sorry! me equivoqué es así...
usando una mascara...

la mascara son los bits que quieres "aislar" ej


Código (cpp) [Seleccionar]
int mascara = 3968;//1111 1000 0000 aislar los primeros 5 bits
int patron = 2560;//1010 0-000 0000  contiene el patron y relleno
int numeroBueno = 2658;//1010 0110 0010
int numeroMalo = 3744;//1110 1010 0000
if((mascara & numeroBueno) == patron){
cout << "bueno 1 \n";
}else{
cout << "malo 1 \n";
}
if((mascara & numeroMalo) != patron){
cout << "bueno 2 \n";
}else{
cout << "malo 2 \n";
}
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

harry_the_blogger

#4
Gracias por tu ayuda. Lo probaré luego y te comentaré los resultados. Supongo que si tengo algún problema puedo volver al foro, ¿o no.?

Ah, una duda, en la parte que dice

Código (cpp) [Seleccionar]

if((mascara & numeroMalo) != patron){

cout << "bueno 2 \n";

}else{

cout << "malo 2 \n";

}



No debería decir:

Código (cpp) [Seleccionar]


if((mascara & numeroMalo) == patron){

cout << "bueno 2 \n";

}else{

cout << "malo 2 \n";

}





Creo que se te escapó un error. XD. O si no, explicame por favor porque el ultimo if-else no sigue la logica del primero.

Gracias por tu ayuda.
Vista mi blog es enriquemesa.blogspot.com

engel lex

si el problema es sobre esto continua el tema, en lo que puedas lo pruebas y me avisas de tus resultados ;)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.