Î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