Le funzioni sui bit avevano dei bug e sono state corrette in una delle ultime versioni di Gambas.
Quindi, intanto sarebbe interessante sapere quale versioni usi.
Detto questo, le funzioni sui bit operano in questo modo:
SHL(numero, spostamento): scorrimento a sinistra (
SHift
Left) di "spostamento" numero di posizioni i bit del numero "numero".
SHR(numero, spostamento): scorrimento a destra (
SHift
Right) di "spostamento" numero di posizioni i bit del numero "numero"
Da tener presente che lo scorrimento implica la "scomparsa" dei bit che escono dal registro. Quindi, se vai a scorrere a sinistra il byte "10000000" di 1 bit, otterrai "00000000".
L'altra operazione fondamentale sui bit è la rotazione, effettuata dalle funzioni ROL (
ROtate Left) e ROR (
ROtate
Right). A differenza dello scorrimento, però, la rotazione implica che i bit che escono dal registro da una parte ricompaiono dall'altra. Mi spiego...
Se ruoti a sinistra di 3 bit il valore "11100000" otterrai "00000111".
Detto questo, vanno tenute in considerazione alcune cose:
1) devi considerare che queste operazioni possono essere eseguite solo su numeri interi del tipo byte, short, integer e long, e che la "scomparsa" dei bit nello scorrimento o la rotazione dipende dalla lunghezza del tipo di numero. Se usi un byte, hai 8 bit ecc...
2) Gambas non ha il tipo "unsigned" per cui nelle operazioni devi sempre tener conto di questo. Esistono infatti 2 funzioni apposite che scorrono i numeri tenendo conto del segno, LSL e LSR, rispettivamente per scorrere a sinistra e per scorrere a destra.
Per tutto il resto fai riferimento alla documentazione ufficiale:
http://gambasdoc.org/help/cat/bitTieni cmq presente che le operazioni sui bit in Gambas non sono certo facili e spesso bisogna operare delle "manipolazioni" per ottenere gli stessi risultati del C (me ne sono accorto io convertendo algoritmi di cifratura da C a Gambas, algoritmi che nella stragrande maggioranza dei casi contemplano operazioni a livello di bit).