I Bit Fields permettono il raggruppamento dei dati in una struttura. Questa
tecnica viene usata soprattutto quando la gestione della memoria o la
memorizzazione dei dati sono uno meta molto ambita.
Tipici esempi sono costituiti da:
raggruppamento di parecchi oggetti in una parola macchinai (i flag di un
bit possono essere compattati); ad esempio, la tabella dei simboli nell'ambito
dei compilatori;
lettura di formati di file esterni (formati di file non standard possono
essere importati); ad esempio, gli interi di 9 bit.
Il C permette di fare questo in una definizione di struttura, mettendo
":lunghezza-bit" dopo la variabile stessa, e cioe':
struct packed-struct {
unsigned int f1:1;
unsigned int f2:1;
unsigned int f3:1;
unsigned int f4:1;
unsigned int type:4;
unsigned int funny_int:9;
} pack;
Qui la struttura packed-struct contiene 6 elementi: 4 flag da 1 bit (f1,...
f4) e funny_int da 9 bit.
Il C automaticamente raggruppa assieme i campi di bit elencati nell'esempio
appena riportato.
Solitamente si accede ai membri della struttura nel seguente modo:
pack.type = 7;
Notiamo che:
solamente "n" bit di basso livello possono essere assegnati ad un numero
di "n" bit. Cosi' il campo "type" non puo' assumere valori maggiori di 15
(4 bits long);
i bit fields vengono sempre convertiti al tipo intero prima di eseguirvi
delle operazioni;
e' permesso "mescolare" tipi normali con bit fields;
la definizione di "unsigned" e' importante, per assicurarsi che per i
flags non venga usato nessun bit per il segno.