Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Cimpuri

c



+ Font mai mare | - Font mai mic



Cimpuri

Atunci cind spatiul de memorare estre la mare pret, poate fi



necesar ca mai multe obiecte sa fie impachetate intr-un singur

cuvint masina; un caz adesea folosit este compactarea

fanioanelor de un singur bit necesare in aplicatii catabelele de

simboluri ale compilatoarelor. Formatele externe impuse de

interfetele cu diversele echipamente externe, adesea impun

compactrea datelor pe un cuvint.

Sa ne imaginam un fragment dintr-un compilator care

manipuleaza o tabela de simboluri. Fiecare identificator dintr-

un program are anumite informatii asociate, de exemplu, este

sau nu un cuvint cheie, e este sau nu extern si/sau static, s. a.

m. d. Cel mai compact mod de a coda astfel de informatii este un

set de fanioane de un bit cuprinse intr-un 'char' sau 'int'.

Modul cel mai uzual este de a defini un set de masti

corespunzatoare pozitiilor cu biti semnificativi, ca in

#define KEYWORD 01

#define EXTERNAL 02

#define STATIC 04

(Numele trebuie sa fie puteri ale lui doi.) Apoi accesul la biti

devine un soi de 'bitareala' cu operatori de permutare,

mascare si complementare, care au foat descrisi in capitolul 2.

Anumite idioame apar frecvent:

flags != EXTERNAL ! STATIC;

valideaza bitii EXTERNAL si STATIC ca fanioane, in timp ce

flags &= (EXTERNAL ! STATIC);

ii invalideaza.

Desi aceste idioame sint cu usurinta manevrate, limbajul C, mai

degraba ofera capacitatea preferabila de adefini si accesa

cimpuri Un cimp este un set de biti adiacenti cuprinsi intr-un

singur 'int'. Sintaxa de definire si accesul cimpurilor este

bazata pe structuri. De exemplu tabela de simboluri definita mai

sus ar putea fi inlocuita printr-o definire a trei cimpuri.

struct flags;

Este astfel definita o variabila numita 'flags' care contine

trei cimpuri de cite un bit. Numarul de dupa ':'

reprezinta lungimea cimpului in biti. Cimpurile sint declarate

fara semn (unsigned) tocmai pentru a accentua ca sint cantitati

fara semn.

Cimpurile individuale sint referite ca 'flags.is_keyword',

'flags.is_extern', etc, la fel ca oricare alti me, bri ai

structurii. Cimpurile se comporta ca niste mici intregi fara semn

si pot participa in expresii aritmetice la fel ca oricare alti

intregi. Exemplele de mai sus pot fi rescrise mai natural astfel

flags.is_extern = flags.is_static = 1;

pozitioneaza bitii pe unu;

flags.is_extern = flags.is_static = 0;

pozitioneaza bitii pe zero;

if (flags.is_extern == 0 && flags.is_static == 0)

pentru a-i testa.

Un cimp poate sa nu corespunda cu limitelke unui 'int'; in

acest caz cimpul este alinial la urmatoarea margine 'int'.

Cimpurile nu trebuie sa aibe un nume; cimpurile fara nume(doua

puncte si lungimea numai) sint folosite ca umplutura. Lungimea

speciala 0 poate fi folosita pentru alinierea la urmatoarea

'int' margine.

Exista un numar de reguli de aplicat cimpurilor. Dintre cele

mai importante, cipurile sint asignate de la stinga la dreapta in

unele masini si de la dreapta la stinga in altele ceea ce

reflecta natura diferita a hardwareului inseamna ca, desi cipurile

sint utilizabile de preferinta pentru a intretine structurile de

adte interne, chestiunea carui sfirsit vine primul trebuie

considerata cu grija pentru prelucrarea datelor definite extern.

Alte restrictii care trebuie avute in minte: cimpurile sint fara

semn ele pot fi memorate numai in 'int'(sau echivalentul

'unsigned'); ele nu sint tablouri; ele nu au adrese, astfel ca

operatorul '&' nu le poate fi aplicat.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1095
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved