Autor Tema: Byte <<= 1 y ?: Como interpretarlos  (Leído 5621 veces)

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

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Byte <<= 1 y ?: Como interpretarlos
« 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
  1. if(!bit_test(crc_Dbyte,15))                                    
  2.           {
  3.             crc_Dbyte <<= 1;                                                   
  4.             bit_test(*current_data, 7 - bit_counter) ?
  5.             bit_set(crc_Dbyte,0) : bit_clear(crc_Dbyte,0);
  6.             continue;
  7.          }


Podria alguien, quitarme esta pequeña laguna, GRACIAS
« Última modificación: 26 de Septiembre de 2006, 13:45:59 por pantera »
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: ALGO <<= 1 QUE ES?
« Respuesta #1 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.

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Byte <<= 1 y ?: Como interpretarlos
« Respuesta #2 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:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Byte <<= 1 y ?: Como interpretarlos
« Respuesta #3 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:
Código: [Seleccionar]
expresion_1?expresion_2:expresion_3;

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, asi que he realizado un 'copy & paste'  :)


Suerte!!! :wink:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Byte <<= 1 y ?: Como interpretarlos
« Respuesta #4 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.

La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Byte <<= 1 y ?: Como interpretarlos
« Respuesta #5 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:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Byte <<= 1 y ?: Como interpretarlos
« Respuesta #6 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
  1. bit_test(*current_data, 7 - bit_counter) ?
  2.             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
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Byte <<= 1 y ?: Como interpretarlos
« Respuesta #7 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
  1. continue;
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Byte <<= 1 y ?: Como interpretarlos
« Respuesta #8 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:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Byte <<= 1 y ?: Como interpretarlos
« Respuesta #9 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
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: Byte <<= 1 y ?: Como interpretarlos
« Respuesta #10 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)  :-/

y=x>9 ?100:200;

es exactamente igual a:


  if(x>9){
    y=100;
  }
  else{
    y=200;
  }


y el segundo caso propuesto por pantera:


  bit_test(*current_data, 7 - bit_counter) ?
  bit_set(crc_Dbyte,0) : bit_clear(crc_Dbyte,0);


es exactamente igual a:


  if(bit_test(*current_data, 7 - bit_counter)){
    bit_set(crc_Dbyte,0);
  }
  else{
    bit_clear(crc_Dbyte,0);
  }


Muchas gracias compañeros del alma por zamarrear mis tristes neuronas.  :mrgreen:

« Última modificación: 26 de Septiembre de 2006, 15:17:16 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Byte <<= 1 y ?: Como interpretarlos
« Respuesta #11 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
  1. continue ;
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Byte <<= 1 y ?: Como interpretarlos
« Respuesta #12 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.

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Byte <<= 1 y ?: Como interpretarlos
« Respuesta #13 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


 :lol:

Ni modo
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)