I campi bit, sebbene soggetti ad alcune restrinzioni (elencate più avanti), non sono altro che dei normali campi (o membri) di una struttura, con la differenza che viene specificata la lunghezza in bit del campo. Di conseguenza si può lavorare sui singoli bit di un byte. Questo metodo può offrire diversi vantaggi, a seconda di come lo si usa. Lo si può preferire ad altri per la sua facilità e chiarezza, ma tutto dipende da cosa volete fare. Un caso particolare che utilizza i campi bit è impiegare i suddetti come variabili booleane, così da ottenere 8 variabili booleane in un singolo byte. Non credo che capiterà mai a qualcuno di dover lesinare su così pochi byte, ma è comunque un'operazione fattibile. Userò questa pratica negli esempi seguenti, poichè è la più facile.
I campi bit, come detto prima, sono membri particolari delle strutture ed in esse vanno definiti. Questo è il prototipo:
struct nome_struttura { tipo nome_campo_1 : lunghezza_campo; tipo nome_campo_2 : lunghezza_campo; /*... ...*/ tipo nome_campo_n : lunghezza_campo; };
struct struttura_campi { char bit1 : 1; char bit2 : 1; char bit3 : 1; char bit4 : 1; char bit5 : 1; char bit6 : 1; char bit7 : 1; char bit8 : 1; };
int main(){ struct struttura_campi campo; /* crea una variabile struttura */ campo.bit1 = 0; /* assegna al membro bit1 il valore 0 */ campo.bit2 = 1; /* altro assegnamento */ if (campo.bit1 == campo.bit2) {/* ... */} /* operazione di confronto di un'istruzione if */ /*... altre istruzioni... ...*/ return 0; }
struct struttura_1{ /*questa struttura utilizza solo 2 campi bit */ char bit1 : 1; char bit2 : 1; }; struct struttura_2{ /*questa struttura occuperà più byte */ char bit1 : 1; char bit2 : 1; char bit3 : 1; char bit4 : 1; char bit5 : 1; char bit6 : 1; char bit7 : 1; char bit8 : 1; char bit_extra :1; };
- NON è possibile conoscere l'indirizzo di un singolo campo bit.
- I campi bit NON possono essere static.
- NON è possibile dichiarare array di campi bit.
- È possibile riscontrare problemi diversi su sistemi operativi diversi.
- È possibile avere problemi di altro genere dovuti alla loro implementazione (vi auguro di non averne).
Aggiungi un commento