hola estoy leyendo el código de un programa ya hecho y hay un par de cosas que no entiendo. a ver si me podeis sacar de dudas.
=====codigo original =====
void setBits(byte value, byte offset)
{
switch(value)
{
case 1:
switch(random(2))
{
case 0:
bits[0]|=offset;
break;
case 1:
bits[1]|=offset;
break;
.
.
.
entiendo que crea una función con dos parámetros de tipo byte que se llaman value y offset. lo que no entiendo es la asignación que hace a bits[0] por ejemplo. no se que es "|= offset"
y por otro lado cuando llama a esta función lo hace así:
setBits(1, 0x02);
el 0x02 que es? 2 en hexadecimal? por que motivo se expresa así? no lo acabo de entender.
espero que alguien me ayude un poco
gracias
Yo tampoco se muy bien que es bits[0], no veo la definición como array de la variable bits... Pero bueno, quizás esté creada anteriomente al código que envías... Imagino que en algún lugar del código tendrás algo como byte bits[8] o algo así...
Bueno, por partes,
a|=0x01;
esto es igual que hacer esto (en código C):
a=a|0x01;
el operador "|" es una OR.
el operador "&" es una AND.
Por lo que a=a OR 0x01;
Por otro lado, la notación hexadecimal en C se realiza, como has supuesto, con el 0x delante del número. De esta forma el compilador sabe que el número usado en la operación está en hexadecimal y no en decimal.
En C puedes usar notación decimal o hexadecimal.
En este caso, como se trata de una especie de "máscaras" de bits la notación hexadecimal es más intuitiva que la decimal...
a|=0x01;//poner a 1 el bit 0 del byte. Sin tocar el resto de bits
a&=0xfe;//poner a 0 el bit 0 del byte. Sin tocar el resto de bits
Cuando tengas una duda, publica todo el código porque mas allá que no entiendas una parte de el, tal vez nosotros necesitamos verlo completo para entender que hace esa parte que a ti te complica.
carmamezo, hay una asignación anterior de tipo array
surbyte, tienes razón, lo que pasa es que el código es un poco largo y no me atreví a ponerlo entero. el programa trata de un reloj hecho según la secuencia de fibonacci y para mostrar la hora se utilizan unos colores en unos cuadros y dependiendo del color del cuadro calculamos los minutos y las horas. estoy pensando en hacer uno, pero no quiero limitarme a copiar y pegar, quiero por lo menos intentar entender lo que hace ademas de intentar hacer algunas modificaciones. os dejo el enlace a la pagina donde podeis ver el código.
tengo dudas sobre lo que comente ayer, no acabo de entender como hace para calcular el código de colores según la hora del día, en un principio pensé que iba a ser complicado porque hay varias combinaciones de colores en una misma hora, pero el tío del programa lo hace de una manera que no soy capaz de descifrar. en principio solo me interesa saber como calcula el color, ya que el programa también pone un modulo de reloj en hora, lee la hora, pone el reloj en modo lampara y cambia la combinación de colores (tiene varias paletas), con cuatro botones que en principio yo no tengo intención de utilizar. en fin si me podeis echar una mano os estaría agradecido, llevo dos días intentando descifrarlo y no acabo de verlo.
gracias
el enlace al código es
https://github.com/pchretien/fibo
y la pagina del creador
http://basbrun.com/
Bueno, como dije hay que ver todo el programa para enteder el contexto.
Al comienzo definen bits[]
#define CLOCK_PIXELS 5
// borré todo lo que no nos interesa ahora
byte bits[CLOCK_PIXELS];
Vector del tipo byte para cada elemento de 5 elementos de 0 a 4.
Lo demás ya fue bien explicado.
gracias a todos creo que ya lo pille