Combinații și bitfields

asociații

A existat entitate creată care conține trei domenii - un câmp este un tip întreg (4 octeți), două tip de câmp int scurt (2 octeți fiecare) și 4 câmp un octet. Odată ce valoarea a fost atribuită DWORD domeniu, de asemenea, a devenit disponibil și restul câmpurilor.

Combinații și bitfields
Asociația în B.

Îmi amintesc că pe x86 octeți sunt aranjate de la dreapta la stânga. Toate câmpurile de asociere „au“ aceleași date, dar fiecare domeniu are acces doar la partea sa.
Iată un alt exemplu: ia în considerare reprezentarea numerelor în virgulă mobilă:

Vă rugăm să rețineți că Uniunea poate fi inițializat ca structura. Valoarea ar trebui să fie exprimate la un tip care are primul câmp. Comparați rezultatele

câmpuri de biți

In acest exemplu, fiecare domeniu al structurii este desemnat ca un câmp de biți, lungimea fiecărui câmp este unitatea. Puteți, de asemenea, în ceea ce privește domeniul structurii convenționale să se aplice fiecărui domeniu. Bit câmpuri sunt de tip unsigned int, deoarece acestea au o lungime de un bit. Dacă lungimea câmpului este mai mare decât un bit, câmpul poate avea și tipul întreg semnat.

Aceeași acțiune se poate face cu o schimbare convențională

Să considerăm un alt exemplu - schimbare de semn constant spre dreapta. Deplasare la dreapta (>>) împinge cel mai din stânga bit spre dreapta și înregistrările zero. Din cauza acestei operații de schimbare drept nu poate fi aplicată, de exemplu, numere cu un semn, pentru că bitul de semn este pierdut. Pentru a remedia situația, vom face schimbare de semn constant: vom verifica ultimul număr de biți (amintiți-vă că lucrăm cu arhitectura x86 și biți sunt aranjate „spate în față“)

Aici am folosit în mod specific int32_t tip (biblioteca stdint.h), pentru a se asigura că mărimea variabilelor din cele 32 de biți. Acum puteți apela funcția și a vedea rezultatul.

ru-Cyrl 18- tutorial Sypachev S.S. 1989-04-14 [email protected] studenți Stepan Sypachev