Sostituire gli operatori logici di spostamento dei bit con semplici operazioni
Come è noto, nel linguaggio C fra gli operatori cosiddetti bitwise, ossia quegli operatori capaci di operare sui singoli bit, vi sono anche gli operatori di spostamento (shift) dei bit, che effettuano un spostamento a sinistra di un bit:
<<
oppure uno spostamento a destra:
>>
Lo spostamento di ciascun bit del primo operando avviene di un numero di posizioni uguale al valore del secondo operando.
Così, ad esempio, il valore 16 è il primo operando, mentre 2 è il secondo operando:
16 << 2
i bit del valore 16 sono spostati a sinistra di 2 posizioni. Contestualmente i bit così liberati sono riempiti da bit posti a zero.
Indice
Lo spostamento in Gambas
In Gambas, come si sa, esistono alcune funzioni specifiche per effettuare lo spostamento dei bit a sinistra.
Due che salvaguardano il "segno" del valore gestito:
Shl(valore, spostamento)
o a destra:
Shr(valore, spostamento)
e due che ignorano il "segno" del valore gestito:
Lsl(valore, spostamento)
o a destra:
Lsr(valore, spostamento)
Spostamento dei bit senza uso delle specifiche funzioni di Gambas
Possiamo, però, ottenere lo stesso risultato, restituito dalle predette spedifiche funzioni di Gambas, effettuando semplici operazioni.
Operazione per lo spostamento a sinistra
Per ottenere lo spostamento a sinistra di un bit si effettuerà una moltiplicazione del valore del bit da spostare per 2 elevato alla potenza determinata dal valore del secondo operando [Nota 1], ossia del numero dello spostamento delle posizioni da effettuarsi:
a << b → a * 2b
Esempio:
6 << 3 → 6 * 23 → 6 * 8 → 48
In Gambas la sintassi è:
Risultato = Numero * CInt(2 ^ Spostamento)
Operazione per lo spostamento a destra
Per ottenere lo spostamento a destra di un bit si effettuerà una divisione del valore del bit da spostare per 2 elevato alla potenza determinata dal valore del secondo operando, ossia del numero dello spostamento delle posizioni da effettuarsi:
a >> b → a \ 2b
Esempio:
16 >> 3 → 16 \ 23 → 16 \ 8 → 2
In Gambas la sintassi è:
Risultato = Numero \ CInt(2 ^ Spostamento)
Note
[1] Si moltiplica per due, poiché il valore del numero binario viene costruito moltiplicando le cifre di tale numero per le potenze di 2.
Esempio:
10101010 = 1*2^7 + 0*2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 170