operațiuni la nivel de bit

Curs de operare 8. bitwise

Informațiile din computer este reprezentat în binar (prezența sau absența tensiunii). Unitatea minimă de informații este bitul - zero sau unu, o minciună sau adevăr, „nu“ sau „da“. Fiecare octet este format din 8 biți. În cazul în care numărul de reper (semnat), din extrema stângă bitul reprezintă semnul numerelor sale - numerele 0 pentru pozitive și 1 pentru numere negative, numărul de biți rămași formează o unitate (aceasta se aplică numai numere întregi, numere reale întotdeauna cu semn). Dacă numărul este nesemnat (fără semn), atunci toți biții implicați în formarea de valori, dar numărul nu poate fi decât pozitiv.

numere întregi pozitive sunt reprezentate în computer în codul normal - aceasta este o reprezentare comună a numărului în sistem binar, și negativ - în codul suplimentar. Pentru codul adițional este luată egală cu reprezentarea binară a întreg modul, atunci toate cifrele din reprezentarea binară este inversată (0 merge la 1, 1 - o 0), acest lucru dă codul așa-numitul invers, la care 1 se adaugă pentru a produce cod suplimentar. De exemplu, numărul de cod normal de 207 folosind 2 bytes - 0000000011001111, și valoarea complementară -207 - (! Numărul de cifre în numărul de semnificative) 1111111100110001. Când este pliată, aceste două numere, 0 se obține (transfer 1 din numărul MSB). În plus, modulo diferite numere pozitive și negative obținute numărul de cod la normal în cazul în care rezultatul este mai mare decât 0, iar numărul de cod suplimentar, în cazul în care rezultatul este mai mic de 0.

Sunt operațiuni care lucrează cu biți - puteți lua o negare, aplică operațiunea „AND“ sau „SAU“. operațiuni la nivel de bit se aplică transferurilor și tipuri de integrale - bool. char. scurt. int și lung (eventual cu modificator unsigned). Cu toate acestea, nu se poate aplica aceste operațiuni la un bit, dar puteți folosi doar una și aceeași operațiune pe toți biții variabilei.

„Și“ , „Sau“ | „exclusiv sau“ ^

int BitCount (int x)

masca unsigned = 0x80000000; pentru (c = 0; x = 0 x ;! <<= 1) if (x & mask) c++; return c;>

// masca - variabila auxiliară prin care se alocă un bit între datorită faptului că toți biții // cu excepția operațiunilor de aplicare stânga următoare va fi egal cu 0, // iar bitul cel mai din stânga va rămâne neschimbat. // Variabila este inițializat la o constantă hexazecimal 0x80000000, // în care toți biții, cu excepția stânga sunt egale cu 0.

Exemplul 2. Funcția setează un pic predeterminată a 0

int ClearBit (int x, int pos)

(masca <

Exemplul 3 Funcția setează un bit predeterminate la 1

Exemplul 4 Utilizând operațiile pe biți pentru a lucra cu atribute

r;> void main ()

articole similare