Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
Câmpuri de binari
159.00K
Категория: ПрограммированиеПрограммирование

Câmpuri de binari

1. Câmpuri de binari

2. Câmpuri de binari

Câmpurile de binari sunt nişte construcţii similare cu
structurile 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 la
construcţ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 mari
ca 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şi
operatori 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-o
variabilă 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âmpului
necesar 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 variabile
de tip structură;
&nume_variabila_struct

16. Câmpuri de binari

operatorul * care permite citirea valorii unei variabile de
tip structură prin intermediul unui pointer;
*nume_pointer_struct

17. Câmpuri de binari

operatorul sizeof care permite determinarea
dimensiunii 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ţia
biosequip() 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”);
}
English     Русский Правила