Bituumen Operatorsid C-s: JA, VÕI, XOR, Shift & Täiendada

⚡ Nutikas kokkuvõte

C-keele bitipõhised operaatorid manipuleerivad andmetega üksiku biti tasandil, kasutades täisarvuliste operandide puhul AND, OR, XOR, täiendus- ja nihutusoperatsioone, et teha kiiremaid arvutusi, pakkida lippe ja juhtida riistvara madala taseme ja manussüsteemide programmeerimisel.

  • 🧮 Operators: Kuus operaatorit — JA (&), VÕI (|), XOR (^), täiend (~), vasakule nihutamine (<<), paremale nihutamine (>>) — toimivad bitthaaval.
  • 🔗 JA & VÕI: & tulemus on 1 ainult siis, kui mõlemad bitid on 1; | on 1, kui ükskõik kumb bitt on 1.
  • 🔀 XOR: ^ tulemus on 1, kui täpselt üks bitt on 1, mis on mugav bittide vahetamiseks ja ümberlülitamiseks.ping väärtused.
  • ↔️ Shifts: Operaatorid << ja >> libistavad bitte vasakule või paremale, korrutades või jagades kahe astmetega.
  • 🔁 Täiendus: Operaator ~ pöörab iga biti ümber, seega 0000 1111 saab kujule 1111 0000.
  • 🤖 Tehisintellekti abi: Tehisintellekti assistendid ja GitHub Copilot genereerivad ja selgitavad kiiresti bitimaski ja nihutamisloogikat.

Bituumen OperaC-keelega

Mis on Bitwise Operators?

Bituumen OperaToreid kasutatakse andmete manipuleerimiseks bititasemel, mida nimetatakse ka bititaseme programmeerimiseks. Bitipõhine programmeerimine töötab ühe või mitme bitimustri või binaararvuga nende üksikute bittide tasandil. Neid kasutatakse numbrilistes arvutustes arvutusprotsessi kiirendamiseks.

Järgmine on programmeerimiskeele C pakutavate bitioperaatorite loend:

Operator Tähendus
& Bitipõhine JA operaator
| Bitipõhine VÕI operaator
^ Bitipõhine eksklusiivne VÕI-operaator
~ Binaarse ühe komplement Operator on ühekordne operaator
<< Vasakpoolse vahetuse operaator
>> Parema vahetuse operaator

Bitipõhiseid operaatoreid ei saa otse rakendada primitiivsetele andmetüüpidele nagu float, double jne. Pidage alati meeles, et bitipõhiseid operaatoreid kasutatakse enamasti koos täisarvu andmetüüp oma ühilduvuse tõttu.

Bitipõhised loogilised operaatorid töötavad andmete kallal bittide kaupa, alustades kõige vähemtähtsast bitist, st LSB-bitist, mis on kõige parempoolsem bit, liikudes MSB (Most Significant Bit) poole, mis on kõige vasakpoolsem bitt.

Bitipõhiste loogiliste operaatorite arvutamise tulemus on näidatud allolevas tabelis.

x y x & y x | seal x^y
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

Pikkade kaupa JA

See on üks kõige sagedamini kasutatavaid loogilisi bitipõhiseid operaatoreid. Seda tähistab üks ampersand (&). Operaatori (&) mõlemale küljele kirjutatakse kaks täisarvulist avaldist.
Bitipõhise JA-operatsiooni tulemus on 1, kui mõlema biti väärtus on 1; vastasel juhul on tulemus alati 0.

Oletame, et meil on 2 muutujat op1 ja op2, mille väärtused on järgmised:

Op1 = 0000 1101
Op2 = 0001 1001

Muutujate op1 ja op2 AND-operatsiooni tulemus on

Result = 0000 1001

Nagu näeme, võrreldakse kahte muutujat bittide kaupa. Kui biti väärtus mõlemas muutujas on 1, on tulemuseks 1 või 0.

Pikkade kaupa VÕI

Seda tähistab üks vertikaalne ribamärk (|). Operaatori (|) mõlemale küljele kirjutatakse kaks täisarvulist avaldist.

Bitipõhise VÕI-toimingu tulemus on 1, kui vähemalt ühe avaldise väärtus on 1; muidu on tulemus alati 0.

Oletame, et meil on 2 muutujat op1 ja op2, mille väärtused on järgmised:

Op1 = 0000 1101
Op2 = 0001 1001

VÕI-toimingu tulemus muutujatel op1 ja op2 on

Result = 0001 1101

Nagu näeme, võrreldakse kahte muutujat bittide kaupa. Kui mõne muutuja biti väärtus on 1, on tulemuseks 1 või 0.

Bitipõhine eksklusiivne VÕI

Seda tähistab sümbol (^). Operaatori (^) mõlemale küljele kirjutatakse kaks täisarvulist avaldist.

Bitipõhise Exclusive-OR-operatsiooni tulemus on 1, kui ainult ühe avaldise väärtus on 1; muidu on tulemus alati 0.

Oletame, et meil on 2 muutujat op1 ja op2, mille väärtused on järgmised:

Op1 = 0000 1101
Op2 = 0001 1001

XOR-operatsiooni tulemus muutujatel op1 ja op2 on

Result = 0001 0100

Nagu näeme, võrreldakse kahte muutujat bittide kaupa. Kui ainult ühel muutujal on väärtus 1, on tulemuseks 0, muidu on tulemuseks 0.

Kirjutame lihtsa programmi, mis demonstreerib bitipõhiseid loogilisi operaatoreid.

#include <stdio.h>
int main() 
{
int a = 20;	/* 20 = 010100 */  
int b = 21;	/* 21 = 010101 */
int c = 0;           

c = a & b;       /* 20 = 010100 */ 
printf("AND - Value of c is %d\n", c );

c = a | b;       /* 21 = 010101 */
printf("OR - Value of c is %d\n", c );

c = a ^ b;       /* 1 = 0001 */
printf("Exclusive-OR - Value of c is %d\n", c );

getch();
}

Väljund:

AND - Value of c is 20
OR - Value of c is 21
Exclusive-OR - Value of c is 1

Bitinihke operaatorid

Bitipõhiste nihutamisoperaatorite abil saab bitimustreid vasakule või paremale nihutada. Vasakule ja paremale on kaks nihutamisoperaatorit, mida annab 'C' ja mida esitatakse järgmiselt:

Operand << n (Left Shift)
Operand >> n (Right Shift)

Siin

  • operaand on täisarvuline avaldis, millel peame sooritama nihkeoperatsiooni.
  • 'n' on bitipositsioonide koguarv, mida peame täisarvuavaldises nihutama.

Vasakpoolse nihutamise operatsioon nihutab "n" bittide arvu vasakule poole. Avaldise vasakpoolseimad bitid hüppatakse välja ja n bitti väärtusega 0 täidetakse paremal pool.

Parempoolse nihutamise operatsioon nihutab 'n' bittide arvu paremale poole. Avaldise kõige parempoolsemad n-bitid hüppatakse välja ja väärtus 0 täidetakse vasakul pool.

Näide: x on täisarvuline avaldis andmetega 1111. Pärast nihketoimingu sooritamist on tulemus:

x << 2 (left shift) = 1111<<2 = 1100
x>>2 (right shift) = 1111>>2 = 0011

Shifts operaatoreid saab kombineerida, siis saab seda kasutada näitekstract täisarvulise avaldise andmed. Kirjutame programmi, mis demonstreerib bitipõhiste nihutusoperaatorite kasutamist.

#include <stdio.h>
int main() {
int a = 20;	/* 20 = 010100 */  
int c = 0;           

c = a << 2;	/* 80 = 101000 */
printf("Left shift - Value of c is %d\n", c );

c = a >> 2;	/*05 = 000101 */
printf("Right shift - Value of c is %d\n", c );
return 0;
}

Väljund:

Left shift - Value of c is 80
Right shift - Value of c is 5

Pärast vasakpoolse nihutamise toimingu sooritamist saab väärtuseks 80, mille binaarne ekvivalent on 101000.

Pärast parempoolse nihutamise toimingu sooritamist muutub väärtuseks 5, mille binaarne ekvivalent on 000101.

Bititäienduse operaator

Bitilist komplementi nimetatakse ka komplemendi operaatoriks, kuna see võtab alati ainult ühe väärtuse või operandi. See on ühekordne operaator.

Kui teostame suvalise bitti täienduse, muutuvad kõik 1-d 0-deks ja vastupidi.

Kui meil on täisarvuline avaldis, mis sisaldab 0000 1111, siis pärast bitipõhise komplemendi toimingu sooritamist muutub väärtuseks 1111 0000.

Bititäienduse operaator on tähistatud sümboliga tilde (~).

Kirjutame programmi, mis demonstreerib bitipõhise komplemendi operaatori rakendamist.

#include <stdio.h>
int main() {
int a = 10;	/* 10 = 1010 */  
int c = 0;           
c = ~(a);      
printf("Complement - Value of c is %d\n", c );
return 0;
}

Väljund:

Complement - Value of c is -11

Siin on veel üks programm koos näidetega kõigist seni käsitletud operaatoritest:

#include <stdio.h>
main() {
unsigned int x = 48;	/* 48 = 0011 0000 */  
unsigned int y = 13;	/* 13 = 0000 1101 */
int z = 0;           

z =x & y;       /* 0 = 0000 0000 */ 
printf("Bitwise AND Operator - x & y = %d\n", z );

z = x | y;       /* 61 = 0011 1101 */
printf("Bitwise OR Operator - x | y = %d\n", z );

z= x^y;       /* 61 = 0011 1101 */
printf("Bitwise XOR Operator- x^y= %d\n", z);

z = ~x;          /*-49 = 11001111 */
printf("Bitwise One's Complement Operator - ~x = %d\n", z);

z = x << 2;     /* 192 = 1100 0000 */
printf("Bitwise Left Shift Operator x << 2= %d\n", z );

z= x >> 2;     /* 12 = 0000 1100 */
printf ("Bitwise Right Shift Operator x >> 2= %d\n", z );}

Pärast programmi kompileerimist ja käivitamist annab see järgmise tulemuse:

Bitwise AND Operator - x & y = 0
Bitwise OR Operator - x | y = 61
Bitwise XOR Operator- x^y= 61
Bitwise One's Complement Operator - ~x = -49
Bitwise Left Shift Operator x << 2= 192
Bitwise Right Shift Operator x >> 2= 12

KKK

Bittide kaupa AND (&) opereerib üksikute bittidega ja tagastab täisarvu, samas kui loogiline AND (&&) kontrollib terveid avaldisi ja tagastab ühe tõese või väära Boole'i ​​väärtuse.

Shift 1 maski loomiseks: määra väärtusega | (1 << n), tühjenda väärtusega & ~(1 << n) ja lülita sisse väärtusega ^ (1 << n).

Vasakule nihutamine n-ga korrutab märgita väärtuse 2-ga, mis on tõstetud n-ni; paremale nihutamine jagab selle arvuga, seega kasutavad kompilaatorid nihutamist kiiruse suurendamiseks.

Kontrolli numbrit & 1. Madalaim bitt tagastab paaritute väärtuste korral 1 ja paarisarvude korral 0, kiiremini kui mooduloperaator.

Sisseehitatud püsivara, draiverid, krüptograafia, tihendamine, graafika ja võrgustamine kasutavad neid lippude pakkimiseks, riistvararegistrite lugemiseks, õiguste maskide loomiseks ja aritmeetika kiirendamiseks.

Shift Operaatorid on tihedamalt seotud kui relatsioonilised, samas kui &, ^ ja | asuvad võrdsusest madalamal, kuid loogilistest && ja || operaatoritest kõrgemal, seega lisage need ohutuse mõttes sulgudesse.

Jah. Tehisintellektiga kodeerimisassistent kirjutab maske ja liigub käsurealt edasi, selgitab negatiivseid täiendeid ja teisendab binaarnäited töötavaks C-ks. Testi alati tulemust.

GitHubi koopia soovitab bitimaski makrosid, bittide määramise ja tühjendamise abilisi ning kommentaarist nihutatavaid matemaatikaülesandeid; võrdle selle täiendamist oma bitise paigutusega.

Võta see postitus kokku järgmiselt: