Operazioni con i bit

Centra, e non centra con arduino.

Ma sapete consigliarmi una guida che spieghi come operare con i bit?? cioè che mi impari a fare tutte quelle operazioni sui bit?? Possibilmente qualcosa di gratuito sul web. Ma se avete qualche libro ditemelo pure.

Thanks :)

Ti consiglio di dare subito un'occhiata al reference. Le funzioni sui bit integrato in Arduino sono ottime e semplici da usare. Se hai chiarimenti sulle funzioni domanda pure.

Direi di partire dall'artimetica binaria, probabilmente con operazioni intendi gli shift che altro non sono che degli scorrimenti per ottenere solamente determinate parti, prova a leggere http://en.wikipedia.org/wiki/Bitwise_operation

Ricorda: 1 byte = 8 bit

Alcune volte ti troverai funzioni che accettano solamente array di byte, per esempio per inviare dati sulla seriale. Come fare ad inviare dei numeri int allora? Semplice int è un tipo che occupa 2 byte su Arduino, quindi possiamo scomporlo in due e inviare un byte alla volta, lato ricevente poi bisognerà leggere i due byte e ricomporli.

Es. Voglio trasmettere il numero 523 (0000001000001011), devo dividere quindi i 2 byte ed otterrò {00000010, 00001011}. Per dividere i due byte la libreria di Arduino fornisce già le funzioni highByte() e lowByte() ma se voglio fare da solo farò così:

523 >> 8

mi sposta a destra di 8 posizioni i bit, aggiunge a sinistra degli zeri per riempire il vuoto lasciato il risultato dello shift è quindi

00000000 00000010

che corrisponderebbe alla parte alta (ovvero i primi 8 bit) del numero 523, questo numero se lo provi a tradurre in decimale è il 2. Per la parte bassa dovrò fare un operazione di AND logico

523 AND FF

FF è 255 in esadecimale che corrisponde in binario a 11111111. Quindi:

00000010 00001011 AND

00000000 11111111

00000000 00001011

Ha come effetto l'azzeramento del primo bit (qualsiasi numero AND 0 fa 0 in binario, mentre AND 1 ritorna il numero stesso) La parte bassa sarà quindi 00000000 00001011, 11 in decimale.

Trasmettendo 2 e poi 11, due numeri decimali di un byte, sarà possibile lato ricezione ricomporli e riottenere 523. Per verifica: 2*256+11=523 quindi il nostro ragionamento è corretto

Un altra operazione utile è lo XOR, utilizzato come maschera. Ciao

Grazie delle risposte...

Non vi voglio farvi perdere tempo, cerco soltanto una semplice guida che mi possa introdurre al calcolo dei bit e magari anche alla loro programmazione.

Cmq piano piano ci sto capendo sempre di più :)

Guarda il reference, lì c'è già tanta roba.