Gli operatori dell’algebra di Boole (NOT AND OR XOR …) possono essere applicati a sequenze di bit piuttosto che a variabili logiche.
Come sequenze di bit i linguaggi di programmazione utilizzano gli interi con 8, 16, 32, 64 bit.
Nel caso di numeri negativi i risultati saranno sorprendenti perché la rappresentazione interna è in complemento a due.
Base 10 | Complemento a 2 | Risultato |
---|---|---|
10 OR 3 | 00000000 00001010 OR 00000000 00000011 = 00000000 00001011 | 11 |
10 AND 3 | 00000000 00001010 AND 00000000 00000011 = 00000000 00000010 | 2 |
10 XOR 3 | 00000000 00001010 XOR 00000000 00000011 = 00000000 00001001 | 9 |
NOT 10 | 00000000 00001010 11111111 11110101 | -11 |
Scorrimenti
I bit possono essere traslati, ordinatamente, verso destra o verso sinistra.
Spostare un bit verso destra equivale a dargli un peso più basso e viceversa…
Base 10 | Complemento a 2 | Risultato |
---|---|---|
10 >> 1 | 00000000 00001010 00000000 00000101 | 5 |
10 << 2 | 00000000 00001010 00000000 00010100 00000000 00101000 | 40 |
-10 << 2 | 11111111 11110110 11111111 11101100 11111111 11011000 | -40 |
A ogni passo di traslazione
- un bit viene scartato
- un bit O viene inserito dalla parte opposta.
La traslazione verso destra equivale a una divisione intera per 2.
La traslazione verso sinistra equivale a una moltiplicazione per 2.
Se i numeri sono negativi e si scorre verso destra si può scegliere se preservare il segno o meno
Base 10 | Complemento a 2 | Risultato |
---|---|---|
-10 >> 2 | 11111111 11110110 11111111 11111011 11111111 11111101 | -3 |
-10 >>> 2 | 11111111 11110110 01111111 11111011 00111111 11111101 | 1073741821 |
Operatori
Gli ambienti di sviluppo utilizzano nomi e simboli diversi
Not | Or | And | Xor | Shift left | Shift right | ||
---|---|---|---|---|---|---|---|
C Java Javascript | ~ | | | & | ^ | << | >> | >>> |
Fogli | BIT.OR() | BIT.AND() | BIT.XOR() | BIT.SPOSTA.SX() | BIT.SPOSTA.DX() | ||
Pascal | Not | Or | And | Xor | Shl | Shr | |
PHP Python | ~ | | | & | ^ | << | >> |