Bit câmp de programare C și c
Spre deosebire de alte limbaje de programare C are o caracteristică numită câmpuri de biți, permite să lucreze cu biți individuali. Bit câmpuri sunt utile pentru mai multe motive. Trei dintre ele sunt enumerate mai jos:
- Dacă spațiul limitat de stocare, puteți stoca mai multe variabile logice (adevărat / fals), într-un singur octet.
- Unele dispozitiv de interfață transmite informații codificate biți într-un singur octet.
- Unele proceduri de codificare necesare pentru a avea acces la biți individuali dintr-un octet.
În timp ce toate aceste funcții pot fi realizate cu ajutorul operatorilor de biți, câmpuri de biți pot aduce mai multă claritate a programului.
struct structura de tip nume name1: lungime;
Tip name2: lungime;
.
Tip imyaN: lungime;
>
câmpuri de biți trebuie să fie declarate ca int, nesemnate sau semnate. Câmpul de biți de lungime 1 trebuie să fie declarat ca o nesemnate, deoarece 1 bit poate avea nici un semn. câmp de biți poate avea o lungime de la 1 la 16 biți pentru medii de 16 biți și de la 1 la 32 de biți pentru medii pe 32 de biți. În Borland C ++, bitul cel mai din stânga este semnul.
Luați în considerare structura definiția de mai sus de mai jos:
dispozitiv struct unsigned activ. 1;
nesemnate gata. 1;
xmt_error nesemnate. 1;
> Dev_code;
Această structură definește trei variabile de un bit fiecare. dev_code structural poate variabil, de exemplu, să fie utilizată pentru decodificarea informațiilor din portul unitate de bandă. Pentru această unitate de bandă ipotetică, următorul cod scrie un octet de informații de pe bandă și verificați erorile folosind dev_code:
void wr_tape (char c)
în timp ce (dev_code.ready!) rd (dev_code); / * Asteptati * /
wr_to__tape (s); / * Scrie un octet * /
în timp ce (dev_code.active) rd (dev_code); / * Așteptați până când înregistrarea de informații * /
în cazul în care (eroarea dev_code.xmt) printf ( "Eroare la scriere");
>
Aici rd () returnează starea wr_to_tape unitate de bandă (), scrie date. Figura arată cum arată variabilă dev_code în memorie.
Figura: Plasarea memoriei câmp de biți în dev_code
După cum se poate observa din exemplul anterior, fiecare domeniu este accesat folosind operatorul „dot“. Cu toate acestea, în cazul în care există un apel la structura folosind un pointer, ar trebui să utilizați -> operator.
Nu este nevoie de a apela fiecare câmp de biți. Terenul de golf, cu un nume, este mai ușor de accesat. De exemplu, în cazul în care unitatea de bandă returnează informația, structura dispozitivului să fie schimbat cu privire la apariția în final centura al cincilea bit este după cum urmează:
dispozitiv struct unsigned activ. 1;
nesemnate gata. 1;
xmt_error nesemnate. 1;
nesemnate. 2;
nesemnate EOT. 1;
> Dev_code;
În cele din urmă, puteți amesteca diferite variabile structurale în câmpuri de biți. De exemplu:
struct adresa emp struct adr;
float de plata;
lay_off unsigned: 1;
unsigned orară: 1;
deduceri fără semn: 3;
>;
definește o înregistrare angajat care folosește un singur octet pentru a stoca trei bucăți de informații - statutul unui angajat, dacă el a plătit și suma deducerilor primite. Fără utilizarea de câmpuri de biți, aceste informații ar lua trei octeți.