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:
1.
struct
nome_struttura {
2.
tipo nome_campo_1 : lunghezza_campo;
3.
tipo nome_campo_2 : lunghezza_campo;
4.
/*...
5.
...*/
6.
tipo nome_campo_n : lunghezza_campo;
7.
};
01.
struct
struttura_campi {
02.
char
bit1 : 1;
03.
char
bit2 : 1;
04.
char
bit3 : 1;
05.
char
bit4 : 1;
06.
char
bit5 : 1;
07.
char
bit6 : 1;
08.
char
bit7 : 1;
09.
char
bit8 : 1;
10.
};
01.
int
main(){
02.
struct
struttura_campi campo;
/* crea una variabile struttura */
03.
campo.bit1 = 0;
/* assegna al membro bit1 il valore 0 */
04.
campo.bit2 = 1;
/* altro assegnamento */
05.
if
(campo.bit1 == campo.bit2) {
/* ... */
}
/* operazione di confronto di un'istruzione if */
06.
/*...
07.
altre istruzioni...
08.
...*/
09.
return
0;
10.
}
01.
struct
struttura_1{
/*questa struttura utilizza solo 2 campi bit */
02.
char
bit1 : 1;
03.
char
bit2 : 1;
04.
};
05.
06.
struct
struttura_2{
/*questa struttura occuperà più byte */
07.
char
bit1 : 1;
08.
char
bit2 : 1;
09.
char
bit3 : 1;
10.
char
bit4 : 1;
11.
char
bit5 : 1;
12.
char
bit6 : 1;
13.
char
bit7 : 1;
14.
char
bit8 : 1;
15.
char
bit_extra :1;
16.
};
- 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).
Nessun commento:
Posta un commento