C Operaatorid bitipidi: AND, OR, XOR, täiendamise ja vahetamise toimingud

Selles õpetuses saate näiteid kõigi C-programmeerimise 6 bitipõhise operaatori kohta.

Aritmeetilises-loogilises üksuses (mis on protsessoris) tehakse matemaatilisi toiminguid nagu näiteks liitmine, lahutamine, korrutamine ja jagamine bititasemel. B-tasemel toimingute teostamiseks C-programmeerimisel kasutatakse bitipõhiseid operaatoreid.

Operaatorid Operaatorite tähendus
& Pikkade kaupa JA
| Piki VÕI
^ Piki XOR
~ Täiendab bititi
<< Nihe vasakule
>> Nihe paremale

Pikkade kaupa JA operaator &

Jaotise AND väljund on 1, kui kahe operandi vastavad bitid on 1. Kui operandi kumbki bitt on 0, hinnatakse vastava biti tulemuseks 0.

Oletame, et kahe täisarvu 12 ja 25 bitti toimimine JA.

 12 = 00001100 (kahendkoodis) 25 = 00011001 (kahendkoodis) 12 ja 25 bittide operatsioon 00001100 ja 00011001 ________ 00001000 = 8 (kümnendkohaga)

Näide 1: bitipõhine JA

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a&b); return 0; ) 

Väljund

 Väljund = 8

Bitipõhine VÕI operaator

Biti OR väljund on 1, kui kahe operandi vähemalt üks vastav bitt on 1. Programmis C Programming tähistatakse bitipõhist OR operaatorit |

12 = 00001100 (binaarses vormingus) 25 = 00011001 (binaarses vormis) bitipõhine VÕI operatsioon 12 või 25 00001100 | 00011001 ________ 00011101 = 29 (kümnendkohaga)

Näide 2: bitipõhine VÕI

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a|b); return 0; ) 

Väljund

 Väljund = 29

X-bitine (ainuõige VÕI) operaator ^

XOR-operaatori bitipõhine tulemus on 1, kui kahe operandi vastavad bitid on vastupidised. Seda tähistatakse tähega ^.

 12 = 00001100 (binaarses vormis) 25 = 00011001 (binaarses vormingus) XOR-i operatsioon bitide kaupa 12 ja 25 00001100 00011001 ________ 00010101 = 21 (kümnendkohaga)

Näide # 3: bitipõhine XOR

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a^b); return 0; )

Väljund

 Väljund = 21

Täiendav operaator biti kaupa ~

Bitipõhine komplimendioperaator on unaaroperaator (töötab ainult ühel operandil). See muutub 1 väärtuseks 0 ja 0 väärtuseks 1. Seda tähistatakse ~.

 35 = 00100011 (binaarses vormis) Komplekti 35 ~ 00100011 toimimine bitide kaupa. 

Keerake C-programmeerimisel sisse bititäpuline operaator

35 (~ 35) bittide täiend on 220 asemel -36, kuid miks?

Mis tahes täisarvu n jaoks on n-i bitti täiend -(n+1). Selle mõistmiseks peaksid teil olema teadmised 2 täiendist.

2 täiend

Nende kahe täiend on binaararvude operatsioon. Numbri 2 täiend on võrdne selle arvu täiendiga pluss 1. Näiteks:

 Kümnendkoha binaarne 2 komplement 0 00000000 - (11111111 + 1) = -00000000 = -0 (kümnendkoht) 1 00000001 - (11111110 + 1) = -11111111 = -256 (kümnendkoht) 12 00001100 - (11110011 + 1) = -11110100 = -244 (kümnendkoht) 220 11011100 - (00100011 + 1) = -00100100 = -36 (kümnendkoht) Märkus: ületäitumist eiratakse, kui arvutatakse 2. täiend. 

35 bittide täiend on 220 (kümnendkohaga). 2 täiend 220 on -36. Seega on väljund 220 asemel 220.

Mis tahes arvu N bittide täiend on - (N + 1). Nii toimige järgmiselt.

 N = ~ N (esindatud 2 komplemendi kujul) 2'-bittide täiendus ~ N = - (~ (~ N) +1) = - (N + 1) 

Näide 4: täiendus bitti

 #include int main() ( printf("Output = %d",~35); printf("Output = %d",~-12); return 0; ) 

Väljund

 Väljund = -36 Väljund = 11

Vahetusoperaatorid C-programmeerimisel

C-programmeerimisel on kaks vahetuseoperaatorit:

  • Parema vahetuse operaator
  • Vasaku vahetuse operaator.

Parema vahetuse operaator

Parempoolse nihke operaator nihutab kõiki bitte kindla arvu määratud bitide võrra paremale. Seda tähistab >>.

 212 = 11010100 (binaarne) 212 >> 2 = 00110101 (binaarne) (kahe biti võrra parem nihe) 212 >> 7 = 00000001 (binaarne) 212 >> 8 = 00000000 212 >> 0 = 11010100 (nihet pole) 

Vasaku vahetuse operaator

Vasaku nihke operaator nihutab kõiki bitte kindla arvu määratud bitide võrra vasakule. Vasaku vahetuse operaatori vabanenud bitipositsioonid täidetakse nulliga. Vasaku vahetuse operaatori sümbol on <<.

 212 = 11010100 (binaarne) 212 << 1 = 110101000 (binaarne) (vasak nihe ühe bitiga) 212 << 0 = 11010100 (nihe 0 võrra) 212 << 4 = 110101000000 (binaarsena) = 3392 (kümnendkohaga )

Näide 5: vahetuste operaatorid

 #include int main() ( int num=212, i; for (i=0; i>i); printf(""); for (i=0; i<=2; ++i) printf("Left shift by %d: %d", i, num< 
 Right Shift by 0: 212 Right Shift by 1: 106 Right Shift by 2: 53 Left Shift by 0: 212 Left Shift by 1: 424 Left Shift by 2: 848 

Huvitavad Artiklid...