Similar presentations:
Câmpuri de binari
1. Câmpuri de binari
2. Câmpuri de binari
Câmpurile de binari sunt nişte construcţii similare custructurile de date. Ele se utilizează atunci, când
componentele structurii pot fi plasate în porţiuni de
memorie, a căror dimensiuni, măsurate în binari, pot fi
şi nedivizibile prin 8, ocupând poziţii intermediare între
hotarele octeţilor.
3. Câmpuri de binari
Dimensiunile câmpurilor au restricţii de dimensiune.Pentru compilatoare mai vechi, dimensiunile
câmpurilor nu depăşesc valoarea 16, pentru
compilatoare mai recente, valoarea de restricţie este
mai mare (64). Câmpurile de binari sunt utilizate
atunci, când este necesară economie de memorie şi,
totodată, pentru comoditate în accesarea informaţiei.
4. Câmpuri de binari
Asemănarea cu structurile începe chiar de laconstrucţia care permite descrierea câmpurilor de
binari:
struct [nume_structura]
{
tip1 [nume_câmp1] : dim1;
tip2 [nume_câmp2] : dim2;
...
tipk [nume_câmpk] : dimk;
} [lista_variabilelor];
5. Câmpuri de binari
unde tip1,…,tipk pot fi tipuri întregi de date: char, short,int şi long, prefixate de modificatorii signed şi unsigned;
nume_câmp1, nume_câmp2, …, nume_câmpk, sunt
identificatorii care dau nume câmpurilor componente,
ele putând şi să lipsească, obţinându-se câmpuri
anonime; iar dim1, dim2, …, dimk sunt dimensiunile
elementelor componente, fiind nişte constante şi care
arată câte cifre binare ocupă câmpul dat în memorie.
6. Câmpuri de binari
De exemplu:struct inaltimePersoana
{
unsigned char metri
: 3;
unsigned char centimetri : 7;
} Ion, Ana;
7. Câmpuri de binari
care este destinată păstrării informaţiei despreînălţimea unei persoane în formatul 1m 45cm. Fiindcă
înălţimea în metri a unei persoane nu depăşeşte
valoarea de 3m, atunci mărimea 3 a primului câmp
este prea suficientă, permiţând plasarea în el a valorii
maximale 7. Tot aşa mărimea 7 a celui de al doilea
câmp permite plasarea valorii maximale 127, ceea ce
este mai mult decât necesarul de 99.
8. Câmpuri de binari
Câmpurile de tip char au restricţia de a fi nu mai marica 8 binari, cele de tip short, int sau long trebuie să fie
nu mai mari ca 16 sau 64 binari pentru versiunile mai
recente de compilatoare. Este permisă şi dimensiunea
0 (zero) a câmpurilor, dar ea poate fi aplicată doar
câmpurilor anonime. Fixarea unei astfel de dimensiuni
are efectul de a mişca hotarul câmpului următor la
hotarul octetului.
9. Câmpuri de binari
Dacă descrierea câmpului de binari a fost deja făcutăşi se doreşte doar definirea unor variabile, atunci va fi
utilizat următorul mod de descriere:
struct nume_structura lista_variabile;
unde variabilele din listă sunt delimitate prin virgule.
10. Câmpuri de binari
Atunci când se definesc variabile de tip câmp de binari,pentru fiecare variabilă se alocă spaţiu de memorie nu
mai mic ca (dim1+dim2+…+ dimk) binari.
11. Câmpuri de binari
struct c_b {int c1
: 3;
unsigned c2 : 2;
char c3 : 7;
int
: 1;
int
: Ø;
signed c4 : 12;
} v1, v2;
pentru fiecare dintre variabilele v1 şi v2, va fi alocat nu
mai puţin de 24 binari.
12. Câmpuri de binari
În cazul câmpurilor de binari, vor fi valabili aceiaşioperatori care sunt valabili şi în cazul structurilor de
date:
operatorul . care permite accesarea câmpului necesar
al unei variabile de tip structură;
nume_variabila_struct.nume_câmp
13. Câmpuri de binari
operatorul = care permite transferul datelor dintr-ovariabilă de tip structură în altă variabilă de acelaşi tip;
nume_variabila_struct1=nume_variabila_struct2;
14. Câmpuri de binari
operatorul -> care permite accesarea câmpuluinecesar al unei variabile de tip structură prin
intermediul unui pointer;
nume_pointer_struct->nume_cimp
15. Câmpuri de binari
operatorul & care permite citirea adresei unei variabilede tip structură;
&nume_variabila_struct
16. Câmpuri de binari
operatorul * care permite citirea valorii unei variabile detip structură prin intermediul unui pointer;
*nume_pointer_struct
17. Câmpuri de binari
operatorul sizeof care permite determinareadimensiunii unei anumite variabile.
sizeof(nume_struct)
sizeof(nume_variabila_struct)
18. Câmpuri de binari
Exemplu. Să se alcătuiască un program care oferăinformaţie despre starea unui calculator.
19. Câmpuri de binari
Pentru alcătuirea programului, va fi utilizată funcţiabiosequip() descrisă în fişierul antet bios.h, şi care
oferă informaţie despre starea calculatorului codificată
într-un int (pe 16 binari). Va fi utilizată o variabilă de tip
câmp de binari ca să avem acces mai simplu la
grupurile de cifre binare care conţin informaţia
necesară. Această variabilă va fi suprapusă pe o
variabilă de tip int.
20. Câmpuri de binari
#include <bios.h>#include <stdio.h>
21. Câmpuri de binari
struct echip{
unsigned floppy : 1; //exista dischiera
unsigned coprocesor : 1; //exista coprocesor
unsigned memorie : 2; //tip memorie
unsigned video
: 2; //tip video
unsigned disc
: 2; //numar discuri
unsigned DMA
: 1; //exista acces direct
//memorie
unsigned port
: 3; //numar porturi
unsigned joc
: 1; //exista port jocuri
unsigned
: 1;
unsigned imprimanta : 2; //numar imprimante
} inf;
22. Câmpuri de binari
void main(){
int *ai;
ai = &inf;
*ai = biosequip();
printf (”numar floppy: %i\n”, inf.floppy);
printf (”numar dischiere: %i\n”, inf.disc + 1);
printf (”videoregim: %i\n”, inf.video);
if (inf.coprocesor == 1)
printf (”coprocesor exista \n”);
else
printf (”coprocesor nu exista \n”);
}
23. Câmpuri de binari
void main(){
Int *ai;
ai = &inf;
*ai = biosequip();
printf (”numar floppy: %i\n”, inf.floppy);
printf (”numar dischiere: %i\n”, inf.disc + 1);
printf (”videoregim: %i\n”, inf.video);
if (inf.coprocesor == 1)
printf (”coprocesor exista \n”);
else
printf (”coprocesor nu exista \n”);
}