Campo di bit
# Campo di bit

Un campo di bit è una struttura dati utilizzata nella programmazione del computer. Consiste di un numero di locazioni di memoria del computer adiacenti che sono state allocate per contenere una sequenza di bit, memorizzate in modo che ogni singolo bit o gruppo di bit all'interno dell'insieme possa essere indirizzato. Un campo di bit è più comunemente usato per rappresentare tipi di dato primitivi di larghezza di bit fissa nota.

Il significato dei singoli bit all'interno del campo è determinato dal programmatore; ad esempio, il primo bit in un campo di bit (situato all'indirizzo di base del campo) viene talvolta utilizzato per determinare lo stato di un particolare attributo associato al campo di bit.

All'interno di microprocessori e altri dispositivi logici, raccolte di campi di bit denominati "flag" sono comunemente utilizzati per controllare o indicare lo stato intermedio o il risultato di particolari operazioni. I microprocessori hanno tipicamente un registro di stato composto da tali flag, utilizzati per indicare varie condizioni post-operazione, ad esempio un overflow aritmetico. I flag possono essere letti e usati per decidere le operazioni successive, come nell'elaborazione delle istruzioni di salto condizionale. Ad esempio, un JE ... JE ... JE ... (Salta se uguale) nel linguaggio assembly x86 risulterà in un salto se il flag Z (zero) è stato impostato da qualche operazione precedente.

Un campo di bit si distingue da un array di bit in quanto quest'ultimo viene utilizzato per memorizzare un ampio insieme di bit indicizzati da numeri interi ed è spesso più ampio di qualsiasi tipo integrale supportato dal linguaggio. I campi di bit, d'altra parte, tipicamente rientrano in una word del calcolatore, e la denotazione dei bit è indipendente dal loro indice numerico.

## Implementazione

I campi di bit possono essere utilizzati per ridurre il consumo di memoria quando un programma richiede un numero di variabili intere che avranno sempre valori piccoli. Ad esempio, in molti sistemi la memorizzazione di un valore intero richiede due byte (16 bit) di memoria; a volte i valori da memorizzare necessitano effettivamente solo uno o due bit. Il fatto che un certo numero di queste minuscole variabili condivida un campo di bit consente un impacchettamento efficiente dei dati nella memoria.

In C e C++, i campi di bit definiti dall'implementazione nativa possono essere creati utilizzando unsigned int, signed int o, in C99, _Bool. In questo caso, il programmatore può dichiarare una struttura per un campo di bit che etichetta e determina la larghezza di diversi sottocampi. Campi di bit dello stesso tipo dichiarati adiacenti possono quindi essere impacchettati dal compilatore in un numero ridotto di parole, rispetto alla memoria utilizzata se ogni "campo" dovesse essere dichiarato separatamente.

Per i linguaggi prive di campi di bit nativi o in cui il programmatore desidera un controllo rigoroso sulla rappresentazione dei bit risultante, è possibile manipolare manualmente i bit all'interno di un tipo di parola più grande. In questo caso, il programmatore può impostare, testare e modificare i bit nel campo utilizzando combinazioni di mascheramento e operazioni bitwise.

## Esempi

### Linguaggio di programmazione C

Dichiarazione di un campo bit in C e C++:

Il layout dei campi di bit in una struct C è definito dall'implementazione. Per avere un comportamento che rimanga prevedibile tra i vari compilatori, potrebbe essere preferibile emulare i campi di bit con gli operatori bit a bit e non:

