Manipularea octeților și a biților


Puteți vedea acest operator în aplicarea practică a inversării desenului

Funcții pentru deplasarea biților în partea stângă (shl) și pe partea dreaptă (shr). În ultimul articol, am văzut din tabel că dacă bițiul de conducere este mutat spre stânga și atribuit la dreapta lui 0, atunci numărul este dublat (adică puterea a două). Numai pentru mutarea biților sunt operatorii shl și shr. Operatorul SHL rulează de o sută de ori mai repede decât operatorul standard de exponentiere ^, deci dacă este nevoie de undeva viteză, este mai adecvată adaptarea acestui operator.
Când lucrați cu declarația SHR, există un truc. Acest operator efectuează o operație inversă în ceea ce privește SHL. Cu toate acestea, dacă a existat un singur bit de la marginea dreaptă a numărului, acesta dispare pentru totdeauna printr-o schimbare și nu intră în calcul, astfel încât se efectuează operația inversă împotriva operației SHL. dar restul dispare.

Procesorul nostru este format din registre de 32 de biți. În fiecare dintre aceste registre se poate încadra doar un număr de 32 de biți sau 4 octeți. Dacă numărul este mai mare, atunci este împrăștiat de registre. Desigur, există mari registre auxiliare (coprocesoare, ele conțin numere de 80 biți). dar viteza lor este mult mai mică decât principalele registre și acestea funcționează destul de diferit. Cu toate acestea, atunci când lucrăm cu numere fracționare, calculul rădăcinilor și macrocomenzile, ele sunt foarte convenabile și practice.

După cum probabil ați înțeles deja, numărul de 32 de biți este:

00000000 00000000 00000000 00000000

După cum puteți vedea, numărul este împărțit în 4 octeți sau 32 de biți. Și fiecare octet este de 8 biți. Cu ajutorul mai multor macrocomenzi putem accesa fiecare bit al numărului, precum și jumătatea inferioară și superioară (16 biți) și jumătatea și jumătatea acestui număr (8 biți). Doar pentru a obține valoarea octetului de ordin scăzut (roz) și macro-ul LoByte este destinat.


Așa cum ați putea vedea rezultatul 255. Numerotul corespunde reprezentării binare a octetului de ordin scăzut 11111111

Pentru a obține octetul de înaltă ordine (albastru), există o macrocomandă HiByte. Funcționează la fel, devine doar un alt octet al numărului.


Rezultatul este de 15 și este clar de ce, nu-i așa?

LoWord și Hiword

Pentru a obține jumătatea inferioară și superioară a numărului, se utilizează macrocomenzile LoWord și Hiword. Aceste macrocomenzi pe care le-am folosit deja în articol despre consola.


Rezultat: 65535 și 65280

Pentru a obține valoarea oricărui bit al unui număr, puteți aplica macrocomanda BIT. Sintaxa sa este:

BIT (număr, număr de biți în număr)

Numărătoarea merge de la 0 la 31 de biți. Dacă bitul se află la acest număr, atunci valoarea returnată este -1. dacă bitul este la acest număr 0. atunci valoarea returnată este 0.

Afișează roșu care bit este determinat de funcție.

Exemplu (determinarea discurilor disponibile în sistem):


Am avut cu siguranță puțin înainte cu funcția API (GetLogicalDrives). dar am vrut să demonstrez aplicarea practică a macrocomenzii. De fapt, funcția returnează masca biți a discurilor disponibile în sistem:

Bitul 0 corespunde cu A
1 bit corespunde cu B
2 biți corespund cu C
3 biți corespund D
4 biți corespund cu E
și așa mai departe.

Macro-ul BIT determină dacă bitul este plin. Cu funcția CHR, trimitem pur și simplu literele necesare care corespund acestor discuri.

BitSet și BitReSet

Pentru a seta un singur bit la o valoare de 1 sau 0. puteți utiliza macro-urile BitSet și BitReSet, respectiv. Valoarea returnată este numărul convertit, ținând cont de setarea de biți.

value = BitSet (număr, număr de biți în număr)

value = BitReSet (numărul, numărul de biți în număr)


Când utilizați API-ul funcțiilor Windows, veți întâlni adesea octeți individuali și biți ai unui număr. Dacă ceva nu este clar în acest articol, încercăm să îl citim și să îl înțelegem din nou. Dacă și după aceea vor exista dificultăți cu înțelegerea. atunci ne întrebăm pe forum

Articole similare