C Operatori bit-bit: AND, OR, XOR, operații de completare și schimbare

În acest tutorial veți afla despre toți cei 6 operatori bit-bit din programarea C cu exemple.

În unitatea aritmetică-logică (care se află în interiorul procesorului), operații matematice precum: adunarea, scăderea, înmulțirea și împărțirea se fac la nivel de biți. Pentru a efectua operațiuni la nivel de biți în programarea C, se utilizează operatori pe biți.

Operatori Înțeles operators
& Bitwise ȘI
| OR bit
^ Bitwise XOR
~ Complement bitwise
<< Schimbați la stânga
>> Schimbați la dreapta

Operator ȘI bit și

Ieșirea lui bit bit AND este 1 dacă biții corespunzători ai doi operanzi este 1. Dacă oricare bit al unui operand este 0, rezultatul bitului corespunzător este evaluat la 0.

Să presupunem că operațiunea bit și ȘI a două numere întregi 12 și 25.

 12 = 00001100 (în binar) 25 = 00011001 (în binar) Funcționare pe biți de 12 și 25 00001100 și 00011001 ________ 00001000 = 8 (în zecimal)

Exemplul nr. 1: ȘI bit

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

Ieșire

 Ieșire = 8

Operator SAU bit |

Ieșirea OR OR în biți este 1 dacă cel puțin un bit corespunzător din doi operanzi este 1. În programarea C, operatorul OR în biți este notat cu |.

12 = 00001100 (În binar) 25 = 00011001 (În binar) În funcție de biți SAU Operațiune de 12 și 25 00001100 | 00011001 ________ 00011101 = 29 (În zecimal)

Exemplul nr. 2: OR bit

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

Ieșire

 Ieșire = 29

Operator bitwise XOR (exclusiv SAU) ^

Rezultatul operatorului XOR în biți este 1 dacă biții corespunzători ai doi operanzi sunt opuși. Se notează cu ^.

 12 = 00001100 (În binar) 25 = 00011001 (În binar) Funcționare bit XOR la ​​12 și 25 00001100 00011001 ________ 00010101 = 21 (În zecimal)

Exemplul # 3: Bitwise XOR

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

Ieșire

 Ieșire = 21

Operator complement biți ~

Operatorul de complimente bitwise este un operator unar (funcționează pe un singur operand). Se schimbă de la 1 la 0 și de la 0 la 1. Se notează cu ~.

 35 = 00100011 (în binar) Completare pe biți Operațiunea de 35 ~ 00100011 ________ 11011100 = 220 (în zecimal) 

Răsuciți operatorul complementar în biți în programarea C

Complementul bitologic al lui 35 (~ 35) este -36 în loc de 220, dar de ce?

Pentru orice număr întreg n, complementul bit al lui n va fi -(n+1). Pentru a înțelege acest lucru, ar trebui să aveți cunoștințele complementului 2.

Complement 2

Complementul lui Two este o operație pe numere binare. Complementul 2 al unui număr este egal cu complementul acelui număr plus 1. De exemplu:

 Complementul binarului zecimal 2 0 00000000 - (11111111 + 1) = -00000000 = -0 (zecimal) 1 00000001 - (11111110 + 1) = -11111111 = -256 (zecimal) 12 00001100 - (11110011 + 1) = -11110100 = -244 (zecimal) 220 11011100 - (00100011 + 1) = -00100100 = -36 (zecimal) Notă: Depășirea este ignorată în timp ce se calculează complementul 2. 

Complementul în biți de 35 este 220 (în zecimal). Complementul celor 2 de 220 este -36. Prin urmare, ieșirea este -36 în loc de 220.

Complementul în biți al oricărui număr N este - (N + 1). Iată cum:

 complement în biți al N = ~ N (reprezentat în forma complementului 2) 2'complement al lui ~ N = - (~ (~ N) +1) = - (N + 1) 

Exemplul nr. 4: complement pe biți

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

Ieșire

 Ieșire = -36 Ieșire = 11

Operatori de schimb în programarea C.

There are two shift operators in C programming:

  • Right shift operator
  • Left shift operator.

Right Shift Operator

Right shift operator shifts all bits towards right by certain number of specified bits. It is denoted by>>.

 212 = 11010100 (In binary) 212>>2 = 00110101 (In binary) (Right shift by two bits) 212>>7 = 00000001 (In binary) 212>>8 = 00000000 212>>0 = 11010100 (No Shift) 

Left Shift Operator

Left shift operator shifts all bits towards left by a certain number of specified bits. The bit positions that have been vacated by the left shift operator are filled with 0. The symbol of the left shift operator is <<.

 212 = 11010100 (In binary) 212<<1 = 110101000 (In binary) (Left shift by one bit) 212<<0 = 11010100 (Shift by 0) 212<<4 = 110101000000 (In binary) =3392(In decimal)

Example #5: Shift Operators

 #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 

Articole interesante...