Esperimenti con logiche programmabili
Programmazione, Tutorial Arduino

Operatori per spostare i bit (bitwise)

Usare Arduino per spostare i bit di una variabile

Oltre alle funzioni viste nel precedente articolo, Arduino è capace di eseguirne altre ed in particolare lo spostamento a destra o a sinistra bit a bit. L’operatore per lo spostamento a destra si esprime con questo operatore >> mentre per lo spostamento a sinistra viene usato questo operatore <<.
Per capire meglio cosa avviene utilizziamo delle immagini che semplificano la spiegazione. In questo caso ho una variabile di tipo byte (8 bit) il cui valore è 255. All’interno del chip atmega328 viene allocata, nella memoria ram, uno spazio di 8 bit i cui valori sono settati a 1

Eseguendo uno spostamento a sinistra <<, tutti i bit si spostano di una posizione verso sinistra e nel bit meno significativo (LSB) viene scritto uno zero:

Quindi il valore della variabile passa da 255 (in binario 11111111) a 254 (in binario 11111110).

Continuando ad eseguire uno spostamento a sinistra, di una posizione, otteniamo i seguenti valori

252  11111100
248 11111000
240 11110000
224 11100000
192 11000000
128 10000000
0 00000000

Il codice che esegue quanto detto è il seguente

[c]
//Variabile di tipo byte
byte MiaVar;

void setup()
{
//init seriale
Serial.begin(9600);
//init variabile 11111111
MiaVar= 255;
}

void loop()
{
//eseguo uno spostamento a sinistra di 1 posizione
//memorizzo il valore nella stessa variabile
MiaVar = MiaVar << 1;

//invio il dato al serial monitor
Serial.println(MiaVar);

//1 secondo di pausa tra una operazione e l’altra
delay (1000);

}

[/c]

Allo stesso modo lo spostamento a destra >> esegue un movimento dei bit dal più significativo al meno significativo:

in questo modo otteniamo i seguenti valori:

127 01111111
63 00111111
31 00011111
15 00001111
7 00000111
3 00000011
1 00000001
0 00000000

Gli operatori >> e << possono spostare i bit anche di diverse posizioni a seconda di come gestiamo l’operatore, ad esempio se voglio spostare i bit di quattro posizioni a sinistra dovrò scrivere:

[c]
MiaVar = MiaVar << 4;
[/c]

in questo modo la variabile MiaVar passerà dal valore 255 al 240.

Generalmente le operazioni bit a bit vengono usate perché sono eseguite molto velocemente da Arduino. Possono anche essere usate per semplici calcoli matematici, ad esempio moltiplicare o dividere un numero, come di seguito:

[c]
//Moltiplica * 2
Risultato = Miavar << 1;
//Moltiplica * 4
Risultato = Miavar << 2;
//Moltiplica * 8
Risultato = Miavar << 3;
//divide / 2
 Risultato = Miavar >> 1;
 //divide / 4
 Risultato = Miavar >> 2;
 //divide / 8
 Risultato = Miavar >> 3;
[/c]

Questo metodo non è molto intuitivo ma quando ci troviamo ad ottimizzare il nostro codice per essere eseguito nel minor tempo possibile, lavorare con i bit è sempre una risorsa.

Related posts

Arduino resettare automaticamente la scheda utilizzando il WatchDog Timer

Marco Lai
13 anni ago

Kinect per pc, interessanti prospettive

Marco Lai
12 anni ago

PCF8574AP come espandere porte IO

Marco Lai
10 anni ago
Exit mobile version