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

În acest tutorial, vom afla în detaliu despre operatorii bit și bit shift din C #. C # oferă operatori de schimbare pe 4 biți și 2 biți.

Operatorii bit și bit shift sunt utilizați pentru a efectua operații la nivel de bit pe date întregi (int, long etc.) și date booleene. Acești operatori nu sunt utilizați în mod obișnuit în situații din viața reală.

Dacă sunteți interesat să explorați mai multe, vizitați aplicațiile practice ale operațiunilor bitbit.

Operatorii bit și bit shift disponibili în C # sunt enumerați mai jos.

Lista operatorilor C # Bitwise
Operator Numele operatorului
~ Complement bitwise
& Bitwise ȘI
| OR bit
^ Exclusiv pe biți SAU (XOR)
<< Shift stânga bit
>> Shift în dreapta bit

OR bit

Operatorul OR bitwise este reprezentat de |. Efectuează operațiune SAU pe biți pe biții corespunzători din doi operanzi. Dacă oricare dintre biți este 1, rezultatul este 1. Altfel rezultatul este 0.

Dacă operanzii sunt de tip bool, operația SAU în biți este echivalentă cu operația SAU logică între ei.

De exemplu,

 14 = 00001110 (În binar) 11 = 00001011 (În binar)

OROperațiune bit între 14 și 11:

 00001110 00001011 -------- 00001111 = 15 (în zecimal)

Exemplul 1: SAU bit

 using System; namespace Operator ( class BitWiseOR ( public static void Main(string() args) ( int firstNumber = 14, secondNumber = 11, result; result = firstNumber | secondNumber; Console.WriteLine("(0) | (1) = (2)", firstNumber, secondNumber, result); ) ) ) 

Când rulăm programul, ieșirea va fi:

14 | 11 = 15

Bitwise ȘI

Operatorul ȘI bit este reprezentat de &. Efectuează operațiunea ȘI pe biți pe biții corespunzători din doi operanzi. Dacă oricare dintre biți este 0, rezultatul este 0. Altfel rezultatul este 1.

În cazul în care operanzii sunt de tip bool, operația AND în biți este echivalentă cu operația AND logică între ei.

De exemplu,

 14 = 00001110 (În binar) 11 = 00001011 (În binar)

Operațiunea bitwise ȘI între 14 și 11:

 00001110 00001011 -------- 00001010 = 10 (în zecimal)

Exemplul 2: ȘI bit

 using System; namespace Operator ( class BitWiseAND ( public static void Main(string() args) ( int firstNumber = 14, secondNumber = 11, result; result = firstNumber & secondNumber; Console.WriteLine("(0) & (1) = (2)", firstNumber, secondNumber, result); ) ) ) 

Când rulăm programul, ieșirea va fi:

 14 și 11 = 10

Bitwise XOR

Operatorul bitwise XOR este reprezentat de ^. Efectuează operațiunea XOR pe biți pe biții corespunzători din doi operanzi. Dacă biții corespunzători sunt aceiași , rezultatul este 0. Dacă biții corespunzători sunt diferiți , rezultatul este 1.

Dacă operanzii sunt de tip bool, operația XOR în biți este echivalentă cu operația XOR logică între ei.

De exemplu,

 14 = 00001110 (În binar) 11 = 00001011 (În binar)

Operațiune bit Bit X între 14 și 11:

 00001110 00001011 -------- 00000101 = 5 (în zecimal)

Dacă doriți să aflați mai multe despre utilizarea Bitwise XOR, vizitați Magia XOR

Exemplul 3: Bitwise XOR

 using System; namespace Operator ( class BitWiseXOR ( public static void Main(string() args) ( int firstNumber = 14, secondNumber = 11, result; result = firstNumber^secondNumber; Console.WriteLine("(0) (1) = (2)", firstNumber, secondNumber, result); ) ) ) 

Când rulăm programul, ieșirea va fi:

 14 11 = 5

Complement bitwise

Operatorul complementului bitwise este reprezentat de ~. Este un operator unar, adică operează pe un singur operand. ~Operatorul inversează fiecare biți adică modificări 1 la 0 și 0 la 1.

De exemplu,

 26 = 00011010 (În binar)

Operațiune de completare pe biți pe 26:

 ~ 00011010 = 11100101 = 229 (în zecimal)

Exemplul 4: Complement bitwise

 using System; namespace Operator ( class BitWiseComplement ( public static void Main(string() args) ( int number = 26, result; result = ~number; Console.WriteLine("~(0) = (1)", number, result); ) ) ) 

Când rulăm programul, ieșirea va fi:

 ~ 26 = -27

Am primit - 27ca rezultat când ne așteptam 229. De ce s-a întâmplat asta?

Se întâmplă deoarece valoarea binară pe 11100101care ne așteptăm să o reprezinte 229este de fapt o reprezentare complementară a lui 2 -27. Numerele negative din computer sunt reprezentate în reprezentarea complementului 2.

Pentru orice număr întreg n, complementul lui 2 nva fi -(n+1).

Complementul 2
Zecimal Binar Complement 2
0 00000000 - (11111111 + 1) = -00000000 = -0 (În zecimal)
1 00000001 - (11111110 + 1) = -11111111 = -256 (În zecimal)
229 11100101 - (00011010 + 1) = -00011011 = -27

Valorile depășirii sunt ignorate în complementul 2.

Complementul în biți al lui 26este 229 (în zecimal), iar complementul 2 al lui 229este -27. Prin urmare, ieșirea este -27în loc de 229.

Shift stânga bit

Operatorul de deplasare spre stânga pe biți este reprezentat de <<. <<Operatorul schimbă un număr la stânga cu un anumit număr de biți. La cele mai puțin semnificative biți se adaugă zero.

În zecimal, este echivalent cu

 num * 2bits

De exemplu,

 42 = 101010 (în binar)

Operațiunea Bitwise Lift Shift pe 42:

 42 << 1 = 84 (În binar 1010100) 42 << 2 = 168 (În binar 10101000) 42 << 4 = 672 (În binar 1010100000)

Exemplul 5: Shift în stânga bit

 using System; namespace Operator ( class LeftShift ( public static void Main(string() args) ( int number = 42; Console.WriteLine("(0)<<1 = (1)", number, number<<1); Console.WriteLine("(0)<<2 = (1)", number, number<<2); Console.WriteLine("(0)<<4 = (1)", number, number<<4); ) ) ) 

Când rulăm programul, ieșirea va fi:

 42 << 1 = 84 42 << 2 = 168 42 << 4 = 672

Shift în dreapta bit

Bitwise operatorul de deplasare stanga este reprezentat de >>. >>Operatorul schimbă un număr la dreapta de către un anumit număr de biți. Primul operand este deplasat la dreapta prin numărul de biți specificat de al doilea operand.

În zecimal, este echivalent cu

 etaj (num / 2 biți)

De exemplu,

 42 = 101010 (în binar)

Operațiunea Bitwise Lift Shift pe 42:

 42 >> 1 = 21 (În binar 010101) 42 >> 2 = 10 (În binar 001010) 42 >> 4 = 2 (În binar 000010)

Exemplul 6: Shift în dreapta bit

 using System; namespace Operator ( class LeftShift ( public static void Main(string() args) ( int number = 42; Console.WriteLine("(0)>>1 = (1)", number, number>>1); Console.WriteLine("(0)>>2 = (1)", number, number>>2); Console.WriteLine("(0)>>4 = (1)", number, number>>4); ) ) ) 

Când rulăm programul, ieșirea va fi:

 42 >> 1 = 21 42 >> 2 = 10 42 >> 4 = 2

Articole interesante...