Operare con i bit

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 Compl. 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 Compl. 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 Compl. a 2 Risultato
-10 >> 2 11111111 11110110
11111111 11111011
11111111 11111101
-3
-10 >>> 2 11111111 11110110
01111111 11111011
00111111 11111101
1073741821

Riepilogo

Gli ambienti di sviluppo utilizzano nomi e simboli diversi

C
Java
Javascript
~ | & ^ << >> >>>
Pascal Not Or And Xor Shl Shr
PHP
Python
~ | & ^ << >>