Operație bițială în c # (partea 1)

Operație bițială în C # (Partea 1)

Operație bițială în c # (partea 1)

Operațiuni binare

În acest articol, voi explica și ar arăta în practică cum și când puteți utiliza operațiile bit în programele scrise în C #. De fapt, lucrul cu operațiunile de biți poate fi atribuit muncii la nivel scăzut, iar programatorii C # rareori au o astfel de nevoie. Într-adevăr, majoritatea sarcinilor pot fi rezolvate în moduri mai elegante, dar există cazuri în care utilizarea operațiilor de biți este pur și simplu necesară.







De exemplu, în practica mea, am avut de-a face cu nevoia de a monitoriza starea sistemului extern. Imaginați-vă că aveți un fel de sistem alcătuit din opt blocuri și trebuie să monitorizați în mod constant starea acestui sistem. Sau chiar așa, sistemul însuși transmite periodic informații despre starea sa la interfața cu "lumea exterioară" și vă conectați la această interfață și procesați datele primite. Deci, sistemul trimite o stare pentru fiecare dintre blocurile sale, iar starea blocului poate fi exprimată prin două valori: blocul funcționează și blocul nu funcționează. Iar informațiile nu sunt transmise separat pentru fiecare bloc (ca DA logic / NU, exprimând starea de bloc) și toate blocurile dintr-o dată, ca un singur octet (numere de opt biți), în cazul în care fiecare bit este corelat cu starea unui bloc special.

Rangurile de numere (inclusiv cele binare, adică biții) sunt de obicei numerotate începând cu cel mai mic (cel mai drept, în înregistrarea cunoscută). La ce, ordinul junior este de obicei dat numărul "0", următorul va avea numărul "1", atunci va fi "2", etc. Iată un exemplu de număr într-o notație binară: 01101111, unde bitul cel mai semnificativ (bit # 7) este "0", iar bitul mic (bit # 0) este "1".

Fie ca bitul să corespundă cu starea primului bloc (sau cu blocul cu indicele "0"), iar bitul superior cu cel de-al optulea bloc (sau blocul cu indicele "7"). Apoi, dacă bitul mic (cel mai drept din ortografia obișnuită a numărului) este setat la "1", atunci credem că primul bloc funcționează și dacă bitul este resetat la "0", atunci credem că blocul nu funcționează. Astfel, dacă sistemul decide să ne informeze că toate blocurile, cu excepția celui de-al doilea și al patrulea, funcționează, va trimite următoarea valoare: 245 în notație zecimală sau 11110101 în binar.







Deci, vom obține acest număr, dar trebuie să îl analizăm, operațiunile de biți ne vor ajuta. În acest caz, pentru a obține starea unui anumit bloc, trebuie să "citim" un anumit bit, adică aflați sensul unui anumit bit (care este devreme, "o" sau "1"). Această sarcină se efectuează folosind operația "AND" bitwise (în C # este desemnată ca ""), prin suprapunerea măștii de biți cu numărul rezultat: [numărul rezultat] [mască bit]. O mască bit este, de asemenea, un număr pe care îl alegem într-un anumit mod. Și pentru a înțelege cum să selectăm în mod corespunzător o mască bitală, trebuie să înțelegem cum funcționează operația "AND" biți. Și funcționează după cum urmează, compară biții corespunzătoare a două numere (adică la zero bit este comparat cu un alt bit zero, primul - primul, al doilea - un al doilea), iar rezultatul bitwise format, ca al treilea număr. Mai mult decât atât, în cazul în care bitul corespunzător primului număr este „1“ și bitul corespunzător al doilea număr este egal cu „1“, iar rezultanta inclusiv bitul corespunzător este egal cu „1“, iar în toate celelalte cazuri, rezultatul va fi „0“. Și astfel, toți biții din ambele numere sunt sortate și rezultatul este format.

De exemplu, mascarea 110000011 este suprapusă pe numărul 11110011, i. E. (11110011 110000011) va da rezultatul de 11000011.

Deci, de unde știți valoarea bitului de care aveți nevoie? Da, este ușor, trebuie să formați o mască bitală, astfel încât bitul dorit (de exemplu cel mai mic) să fie egal cu "1", iar toți ceilalți biți ai măștii să fie egali cu "0". După aceea, este necesar să se impună o mască pe numărul prin intermediul operațiunii „“, iar în cazul în care rezultatul este „0“, numărul inițial, biți interesați este „0“, în caz contrar (în cazul în care rezultatul nu este zero) bit setat la ' 1 ".

Folosind această cunoaștere, să scriem o clasă ale cărei obiecte vor stoca numerele primite de la sistemul extern și la cerere (accesând proprietatea dorită), să returneze starea blocului de interes ca o valoare logică a adevărului / falseului. Puteți vedea această clasă astfel:

O înregistrare a formularului 0x01 înseamnă că am specificat un număr în notație hexazecimală. Dacă dorim să specificăm valoarea unui număr în formă hexazecimală, atunci trebuie să adăugăm prefixul "0x" înaintea numărului (puteți specifica și zerourile inițiale).

Acum, dacă vom crea o clasă de «StateController» obiect cu numărul primit din sistem, de exemplu, să fie numărul 26 (zecimal), apoi apeland proprietatea «Unit1State», putem vedea că prima unitate nu funcționează:

În acest articol, am vorbit despre cum să obțineți valorile anumitor biți ai unui număr! În următorul articol, voi continua să vorbesc despre operațiunile de biți din C # (vom discuta despre stabilirea valorilor anumitor biți ai numărului).







Articole similare

Trimiteți-le prietenilor: