C Operatori pa bitēm: AND, OR, XOR, papildināšanas un maiņas darbības

Šajā apmācībā jūs uzzināsit par visiem 6 bitprogrammu operatoriem C programmēšanā ar piemēriem.

Aritmētiski loģiskajā vienībā (kas atrodas CPU) matemātiskas darbības, piemēram: saskaitīšana, atņemšana, reizināšana un dalīšana tiek veiktas bitu līmenī. Lai veiktu bitu līmeņa operācijas C programmēšanā, tiek izmantoti operatori bitiem.

Operatori Operatoru nozīme
& Bitu virzienā UN
| Bitwise OR
^ Bitor XOR
~ Bitwise papildinājums
<< Pārslēgties pa kreisi
>> Pārslēgties pa labi

Bitu virzienā UN operators &

Ja bits ir 2, operandu biti ir 1, ja divu operandu atbilstošie biti ir 1. Ja kāds no operanda bitiem ir 0, attiecīgā bita rezultāts tiek novērtēts kā 0.

Pieņemsim, ka divu veselu skaitļu 12 un 25 bitu darbības AND.

 12 = 00001100 (binārā formātā) 25 = 00011001 (binārā režīmā) 12 un 25 bitu darbība 00001100 un 00011001 ________ 00001000 = 8 (decimāldaļās)

1. piemērs

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

Rezultāts

 Rezultāts = 8

Operators pa bitiem vai

Bitu OR izeja ir 1, ja vismaz viens atbilstošais divu operandu bits ir 1. C programmēšanas operātoru bitu VAI apzīmē ar |.

12 = 00001100 (binārā formātā) 25 = 00011001 (binārā formātā) pa bitiem VAI 12 un 25 darbības 00001100 | 00011001 ________ 00011101 = 29 (aiz komata)

2. piemērs

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

Rezultāts

 Rezultāts = 29

Operators Bitwise XOR (ekskluzīvs VAI) ^

Operatora bitu bitu XOR rezultāts ir 1, ja divu operandu atbilstošie biti ir pretēji. To apzīmē ar ^.

 12 = 00001100 (binārā formātā) 25 = 00011001 (binārā formātā) 12 un 25 darbība pa bitiem XOR 00001100 00011001 ________ 00010101 = 21 (aiz komata)

3. piemērs: XOR pa bitiem

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

Rezultāts

 Rezultāts = 21

Bitu papildinājums operators ~

Komplimentu operētājs Bitwise ir vienots operators (darbojas tikai vienā operandā). Tas mainās no 1 uz 0 un no 0 uz 1. To apzīmē ar ~.

 35 = 00100011 (binārā formātā) Komplekta 35 ~ 00100011 darbība ar bitu paņēmienu ________ 11011100 = 220 (aiz komata) 

Ievērojiet C programmēšanas bitu papildināšanas operatoru

35 (~ 35) papildinājums bitā ir -36, nevis 220, bet kāpēc?

Jebkuram veselam skaitlim n būs b papildinājums bitā -(n+1). Lai to saprastu, jums vajadzētu zināt zināšanas par papildinājumu 2.

2. papildinājums

Divu papildinājums ir bināro skaitļu darbība. Skaitļa 2 papildinājums ir vienāds ar skaitļa papildinājumu plus 1. Piemēram:

 Decimāldaļas binārā 2 papildinājums 0 00000000 - (11111111 + 1) = -00000000 = -0 (decimāldaļa) 1 00000001 - (11111110 + 1) = -11111111 = -256 (decimālskaitlis) 12 00001100 - (11110011 + 1) = -11110100 = -244 (decimālskaitlis) 220 11011100 - (00100011 + 1) = -00100100 = -36 (decimāldaļa) Piezīme: Pārplūde tiek ignorēta, aprēķinot 2. papildinājumu. 

35 papildinājums bitā ir 220 (aiz komata). 2 papildinājums no 220 ir -36. Tādējādi izeja ir -36, nevis 220.

Jebkura skaitļa N bitu papildinājums ir - (N + 1). Lūk, kā:

 bit = N = ~ N papildinājums (attēlots 2 papildinājuma formā) 2 '~ N = - (~ (~ N) +1) = - (N + 1) papildinājums 

4. piemērs: papildinājums pa bitiem

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

Rezultāts

 Izeja = -36 Izeja = 11

Maiņu operatori C programmēšanā

C programmēšanā ir divi maiņu operatori:

  • Labās maiņas operators
  • Kreisās maiņas operators.

Labās maiņas operators

Labās maiņas operators nobīda visus bitus uz labo pusi ar noteiktu norādīto bitu skaitu. To apzīmē ar >>.

 212 = 11010100 (binārā) 212 >> 2 = 00110101 (binārā) (labā nobīde par diviem bitiem) 212 >> 7 = 00000001 (binārā) 212 >> 8 = 00000000 212 >> 0 = 11010100 (bez maiņas) 

Kreisās maiņas operators

Kreisās maiņas operators nobīda visus bitus pa kreisi ar noteiktu skaitu norādīto bitu. Bitu pozīcijas, kuras kreisās maiņas operators ir atbrīvojis, tiek aizpildītas ar 0. Kreisās maiņas operatora simbols ir <<.

 212 = 11010100 (binārā) 212 << 1 = 110101000 (binārā) (kreisā nobīde ar vienu bitu) 212 << 0 = 11010100 (nobīde par 0) 212 << 4 = 110101000000 (binārā) = 3392 (decimāldaļās) )

5. piemērs: Maiņu operatori

 #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 

Interesanti raksti...