Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pantera en 26 de Septiembre de 2006, 13:33:26
Título: Byte <<= 1 y ?: Como interpretarlos
Publicado por: pantera en 26 de Septiembre de 2006, 13:33:26
Hola amigos tengo una pequeña duda que no se bien como interpretarlo
Se que debe de ser un corrimiento pero no comprendo ese uno que es. Quizas, me imagino que es, cuantos bits es desplazado la palabra, cierto?
crc_Dbyte <<= 1
<< Left Shift operator <<= Left shift assignment operator, x<<=y, is the same as x=x<<y
Ademas que quiere decir esto:
?: Conditional Expression operator
El codigo que estoy revisando es esto:
Código: Matlab M
if(!bit_test(crc_Dbyte,15))
{
crc_Dbyte <<= 1;
bit_test(*current_data, 7 - bit_counter) ?
bit_set(crc_Dbyte,0) : bit_clear(crc_Dbyte,0);
continue;
}
Podria alguien, quitarme esta pequeña laguna, GRACIAS
Título: Re: ALGO <<= 1 QUE ES?
Publicado por: Nocturno en 26 de Septiembre de 2006, 13:45:54
Es una pregunta muy razonable cuando se comienza con el C porque, si algo tiene este lenguaje, es que quien lo diseñó seguro que había fumado algo raro cuando implementó los comandos.
A ver, creo que será más fácil entender si comparamos "<<" con otro operador". Por ejemplo, el operador "<<" es un desplazamiento a la izquierda, al igual que el "+" es una suma.
Pues bien, si entendemos esto: x = x + 1; incrementa "x" en una unidad y lo asignas nuevamente a "x"
también debemos entender esto: x = x << 1; desplaza "x" a la izquierda un bit y lo asignas nuevamente a "x"
Llegados a este punto, hemos de decir que al señor fumado se le ocurrió simplificar estas fórmulas para ahorrar teclazos al programador a la vez que incrementaba su dolor de cabeza.
De esta manera, la primera fórmula es equivalente a: x += 1; incrementa "x" en una unidad y lo dejas almacenado en "x"
y la segunda fórmula, por tanto, es equivalente a: x <<= 1; desplaza "x" a la izquierda un bit y lo dejas almacenado en "x"
No sé si me he explicado bien, pero si no lo entiendes, fúmate algo y vuelve a leerlo.
Título: Re: Byte <<= 1 y ?: Como interpretarlos
Publicado por: vszener en 26 de Septiembre de 2006, 13:48:41
Ese '1' con el operador '<<' significa, desplazamiento hacia la izquierda un bit de la variable declarada.
Suerte!!! :wink:
Título: Re: Byte <<= 1 y ?: Como interpretarlos
Publicado por: vszener en 26 de Septiembre de 2006, 13:56:29
Jeje han contestado y modificado el post cuando estaba yo publucando...
El comando ?: es el operador ternario condicional, cuya estructura es la siguiente:
Evalua expresion_1, si es cierta toma la expresion_2, si es falsa toma la expresion_3......ejemplo:
x=10; y=x>9 ?100:200;
Como "x" es mayor que 9, "y" tomara el valor de 100. Esta respuesta la conteste en un post anterior, este concretamente Variable boolean en C (http://www.todopic.com.ar/foros/index.php?topic=4975.0), asi que he realizado un 'copy & paste' :)
Suerte!!! :wink:
Título: Re: Byte <<= 1 y ?: Como interpretarlos
Publicado por: pantera en 26 de Septiembre de 2006, 14:13:03
a oks gracias me has aclarado mucho que era ese uno, entonces me imagino que si pongo un 4, lo desplaza cuatro unidades.
Sin embargo que pasa a la derecha de la palabra los datos que aparecen que son:
La parte de la izquierda que desplace ó a parecen en ceros?
Oye noctuno una ultima cosa. Sabes para que es el comando
?: Conditional Expression operator
es que ando checando como hacer un CRC, el cual esta en el compilador, pero veo que usa esa expresion nose si para compara o para que?
El codigo que segun reviso es el de arriba
Gracias por tu ayuda.
Título: Re: Byte <<= 1 y ?: Como interpretarlos
Publicado por: vszener en 26 de Septiembre de 2006, 14:16:14
Aparecen ceros, al desplazar un bit a la izquierda es como multiplicar por dos, si lo desplazas dos veces, es como multiplicar por cuatro....el operador ternario condicional (?:) arriba esta puesto :?
Suerte!!! :wink:
Título: Re: Byte <<= 1 y ?: Como interpretarlos
Publicado por: pantera en 26 de Septiembre de 2006, 14:24:35
Ok, ya te entendi, es una clase de IF pero en este caso yo no estoy comparando nada
Código: Matlab M
bit_test(*current_data, 7 - bit_counter) ?
bit_set(crc_Dbyte,0) : bit_clear(crc_Dbyte,0);
o simplemente espero un 0 o 1 (False o true) y de ahi decide el operador terciario?
Gracias por contestar tan rapido. GRACIAS
Título: Re: Byte <<= 1 y ?: Como interpretarlos
Publicado por: pantera en 26 de Septiembre de 2006, 14:29:05
Oye que pena. por preguntar tanto. jeee
Pero el continue que es lo que hace ?
Código: Matlab M
continue;
Título: Re: Byte <<= 1 y ?: Como interpretarlos
Publicado por: vszener en 26 de Septiembre de 2006, 14:35:08
La función bit_test(variable_a_evaluar,bit_a_evaluar); comprueba el bit deseado en bit_a_evaluar de la variable_a_evaluar, es decir, devuelve un '0' o un '1' según el bit a evaluar de la variable sea, en el caso de tú código, evaluará el bit definido por '7 - bit_counter' de la variable '*current_data', si la evaluación es un '0', pondrá un '0' a la variable 'crc_Dbyte' en cambio si dá un '1' la evaluación, pondrá un '1' a la variable 'crc_Dbyte'
Suerte!!! :wink:
Título: Re: Byte <<= 1 y ?: Como interpretarlos
Publicado por: pantera en 26 de Septiembre de 2006, 14:48:36
HOMBRE
Mil gracias Me has hecho un poco menos ignorante. Ademas has ganado un fiel amigo.
De antemano muchas gracias por que hay gente como tu que ayuda a la gente menos ignorante como yo.
GRACIAS Y SALUDOS DE MEXICO, QUERETARO
Título: Re: Byte <<= 1 y ?: Como interpretarlos
Publicado por: RedPic en 26 de Septiembre de 2006, 15:11:03
Ohhhhh ... hacía muchos, muchos muchos años que no veía esta expresión :shock: (en verdad ya ni la recordaba, y ni mucho menos la habría utilizado con los PIC's) :-/
Muchas gracias compañeros del alma por zamarrear mis tristes neuronas. :mrgreen:
Título: Re: Byte <<= 1 y ?: Como interpretarlos
Publicado por: pantera en 26 de Septiembre de 2006, 15:29:36
Oye que pena. por preguntar tanto. jeee
Pero el continue que es lo que hace ?
Código: Matlab M
continue ;
Título: Re: Byte <<= 1 y ?: Como interpretarlos
Publicado por: Nocturno en 26 de Septiembre de 2006, 16:11:59
Seguro que ese trozo de código que has pegado estaba dentro de un bucle for o while. Si es así, el "continue" hace que no se ejecute más código dentro de la iteración actual del bucle y salte a la siguiente.
Título: Re: Byte <<= 1 y ?: Como interpretarlos
Publicado por: pantera en 26 de Septiembre de 2006, 16:19:28
AAAAAA
Mira que me has aclarado todo.
es una clase de break, en realidad si. Hay un for antes entonces al llegar ahi se sale.
A OKS. jeee creo que habia entendido mal el codigo asi que comensare a revisar todo de nuevo