Hola estoy intentando descifrar como hace lo que hace la función de abajo. Entiendo que lo que hace es meter en el registro TCCR2A el valor binario 1000000 . El problema que tengo es que es la primera vez que veo << y | usandolo así y no lo entiendo como consigue meter el valor en el registro.
Gracia SrDonGato por la explicación pero no lo acabo de ver. Mañana me lo leo más lento pero ¿COM2A0 es un bit o un byte? porque creo que es un bit y eso es lo que me rompe los esquemas tanto en desplazar como en la lógica OR. porque or de 10000000= es 1 o en binario 00000001 a no ser que con ese or haga (COM2A0 or 10000000) entonces si sería el septimo bit a un. Pero esto último me parece muy farragoso seguro que para hacer un or entre 2 bytes hay una sintaxys mas clara. En fin que no lo veo muy claro.
aunque para nosotros una variable de bolean o bit es un número , fisicamente en memoria ocupa un byte, así que al hacer un or lo hace bit a bit del byte completo.
aun así el número de la derecha del operador es el número de veces que desplazas todos los bits hacia la izquierda o derecha ( << o >> )y se pueden perder bits. oir eso si al número 0 desplazas bits , sea el número que sea y hacia donde sea siempre será 0.
se usa por ejemplo para saber el estado de un bit en un registro.
por ejemplo queremos saber si el bit 6 del registro TCCR2A (byte) está a 0 o 1
pues hacemos un and y desplazamos el bit para dejarlo en la posicion 1
if ((TCCR2A&0x20)>>6) { hacer esto }
y al reves, si se quiere poner un bit a 1 de un registro dependindo de una variable
if(activado) { TCCR2A = (1<<6) | TCCR2A }
creo recordar era de esta manera, asi lo hacia con pic
Gracias SrDonGato, no se me habría ocurrido que el bit es un byte ni de casualidad Creo que ya lo he entendido, menuda paranoia al que se le ocurrió esto. Salu2