Título: Operadores con bits - consulta Publicado por: HRSLASH en 5 Noviembre 2012, 19:14 pm Hola foreros. Tengo este codigo y lo que quiero es que devuelva 1 si el simbolo pasado a la funcion es alguno de los definidos arriba. Habia pensado en hacerle un corrimiento de bits dependiendo la posicion del bit encendido. por ej >> (int)sqrt(0x3FF % sym + 1) pero el problema es que este metodo no funciona con algunas constantes.. como puedo saber la posicion del bit encendido para moverlo y que si el argumento concuerde con alguna constante devuelva 1?
Código
Gracias de antemano! :D Título: Re: Operadores con bits - consulta Publicado por: naderST en 5 Noviembre 2012, 20:40 pm El problema son los valores que puede estar tomando sym, es decir si el valor de sym no es potencia de dos te va a dar problemas
Título: Re: Operadores con bits - consulta Publicado por: xiruko en 5 Noviembre 2012, 23:20 pm Código
hola, no entiendo muy bien lo que haces pues estas haciendo un OR con todas las constantes. esto se traduce en que las estas sumando a nivel de bit. como ejemplo mas sencillo para que veas lo que pasa, mira esto: Código: a = 4 = ...0100 como veras, no tiene mucho sentido para hacer lo que tu quieres hacer ya que acabas haciendo un AND con algo extraño que no representa nada. ademas, si fuera el caso de que eso fuera correcto, tu funcion seguiria sin devolver 1 o 0, ya que por ejemplo, si el simbolo fuera el QUESTION: Código: QUESTION=0x10 asi pues tu funcion devolveria 16. no te olvides que las operaciones a nivel de bit son en paralelo, es decir, el bit 0 de un numero con el bit 0 del otro, el bit 1 con el bit 1, etc. en lugar de eso, si lo que quieres es que la funcion devuelva 1 cuando coincida con alguna de las constantes, y quieres hacerlo aplicando alguna operacion a nivel de bits, una solucion podria ser esta: Código
donde uso la operacion XOR que dara 0 si los dos numeros son iguales. como veras es lo mismo que usar en la condicion del if un symbols[ i]==sym, pero lo puse por pedir que fuera con operaciones de bits. si lo que quieres es que la funcion sea de 1 solo return, esto te podria servir: Código
aunque sinceramente no se que tan eficiente es respecto a la primera version que es mas facil de entender. un saludo! Título: Re: Operadores con bits - consulta Publicado por: rir3760 en 6 Noviembre 2012, 17:01 pm si lo que quieres es que la funcion sea de 1 solo return, esto te podria servir: Tiene la misma eficiencia. Ello porque en el caso de operador lógico AND si el operando a la izquierda es falso el derecho no se evalúa, en otras palabras la evaluación termina en cuanto uno de los operando en tu expresión sea cero (indicando que coincidió con alguna de las macros).Código
aunque sinceramente no se que tan eficiente es respecto a la primera version que es mas facil de entender. Hola foreros. Tengo este codigo y lo que quiero es que devuelva 1 si el simbolo pasado a la funcion es alguno de los definidos arriba. Eso implica que se deben cumplir tres condiciones:1) Ser mayor o igual que 1. 2) Ser menor o igual que 256. 3) Ser una potencia de dos (en binario el numero tiene solo un bit a uno). Combinando los tres tenemos: Código
Un saludo Título: Re: Operadores con bits - consulta Publicado por: HRSLASH en 6 Noviembre 2012, 17:16 pm Muchas gracias a todos por las respuestas! Finalmente me he quedado con la que propuso rir3760 funciona perfecto!! :D
|