Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Campuri de biti

c


Campuri de biti

Limbajul C ofera posibilitatea de a structura datele la nivel de bit. Astfel, unor membrii de structuri sau uniuni, li se pot aloca, dintr-un octet, biti individuali sau grupuri de biti. In felul acesta, se definesc campuri de biti care pot fi accesate fiecare, separate de restul octetului, pentru evaluare si/sau modificare.



Forma generala de definire a unei structuri cu membrii de tip camp de biti este:

struct identif_structura

lista_identif_var_tip_struct;

unde prin lungime este specificat numarul de biti dintr-un ca 757f54h mp.

Pentru campurile de biti exista urmatoarele restrictii:

tipul poate fi int, signed sau unsigned;

lungime este o constanta intreaga cu valori intre 0 si 15;

nu se poate evalua adresa unui camp de biti;

nu se pot organiza tablouri de campuri de biti;

nu se poate sti cum sunt rulate campurile (de la dreapta la stanga sau invers, functie de echipament).

Campurile de biti pot fi utile atunci cand informatia furnizata de anumite echipamente este transmisa prin octet sau atunci cand se doreste accesul la bitii unui octet sau atunci cand memoria este limitata si anumite informatiii pot fi stocate intr-un singur octet.

De exemplu, pentru analiza intrarii de la un echipament hard (cum ar fi portul de stare de la un adaptor de comunicatie), un octet de stare poate fi organizat astfel:

Bit

Semnificatie (daca vloarea bitului este 1)

Modificare in linia "Clear to send"

Modificare in linia "Data set ready"

Detectare de font crescator

Modificare in linia de receptie

"Clear to send" (CTS)

"Data set ready" (DST)

Apel telefonic

Semnal receptionat

Informatia dintr-un astfel de octet de stare poate fi reprezentata utilizand urmatorul structura de campuri de biti:

struct organizare_stare

stare_octet;

Referirea la un camp de biti se face ca la orice membru al unei structuri, cu ajutorul operatorilor punct (selectare directa) sau sageata (selectare indirecta). Exemplu:

stare_octet.apel=0;

Numele campului de biti poate sa lipseasca. In acest caz, bitii sunt alocati conform specificatiei lungime, dar nu pot fi utilizati deoarece nu pot fi accesati.

De exemplu, daca se defineste stuctura:

struct organizare_redusa_stare

stare_octet;

accesul la bitii cts si dsr se face mai usor, deoarece se sare peste biti neutilizati.

Bitii neutilizati, situati dupa ultimul camp de biti utilizat (dsr, in cazul exemplului), nu este nevoie sa fie specificati.

Intr-o structura, se pot amesteca membrii normali cu campuri de biti.

struct date_pers

student;

Campurile de biti se pot initializa ca orice alt membru al structurii. Pentru bitii neutilizati nu se specifica valori.

Programul urmator ilustreaza modul de alocare a memorie, in cazul structurilor cu campuri de biti:

/* Campuri de biti */

#include <stdio.h>

#include <conio.h>

typedef struct

campuri;

void main()

char *text[]=;

char *p;

int i,j,k;

exemplu.data=&exemplu.adr;

printf(' Membrii variabilei exemplu:n');

printf('adr=%xn',exemplu.adr);

printf('cts=%dn',exemplu.cts);

printf('dsr=%dn',exemplu.dsr);

printf('lungime=%xn',exemplu.lung);

printf('adr data=%pn',exemplu.data);

printf('nn Afisare in binar var exemplu: ');

printf(' %d octetin',k=sizeof(exemplu));

p=(char*)&exemplu;/* Adr prim octet */

for(i=0; i<k; i++,p++)

getch );

Uniuni

O uniune este o locatie de memorie care este impartita, in momente diferite, de doua sau mai multe variabile, in general, de tipuri diferite. Sintaxa declaratiei unei uniuni este similara cu cea a structurii:

union identif_structura

lista_identif_var_tip_uniune;

unde identificatorii declarati ca membrii reprezinta nume cu care sunt referite obiectele de tipuri diferite care utilizeaza in comun zona de memorie.

Spatiul de memorie alocat corespunde tipului de dimensiune maxima. De exemplu, in secventa:

union tip_u

var_u;

spatiul de memorie alocat pentru variabila uniune var_u este de 2octeti.

Tipurile uniune ofera posibilitatea unor conversii interesante, deoarece aceeasi zona de memorie poate contine informatii organizate in moduri diferite, corespunzatoare tipurilor membrilor.

De exemplu, in programul Uniuni, in doi octeti se memoreaza pe rand un caracter si un intreg, dupa care se afiseaza continutul fiecarui octet.

/* Uniuni */

#include <stdio.h>

#include <conio.h>

union tip_u

;

void tipareste( union tip_u x, char *p);

void main()

void tipareste( union tip_u x, char *p)

Membrul unei uniuni poate fi de tip structura, cu sau fara campuri de biti.

De exemplu, in secventa urmatoare tipul uniune tip_u contine un membru s, de tip structura cu camp de biti:

struct tip_s

;

union tip_u

;



Document Info


Accesari: 2225
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )