Î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 # BitwiseOperator | 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)
OR
Operaț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 - 27
ca rezultat când ne așteptam 229
. De ce s-a întâmplat asta?
Se întâmplă deoarece valoarea binară pe 11100101
care ne așteptăm să o reprezinte 229
este 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 n
va fi -(n+1)
.
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 26
este 229 (în zecimal), iar complementul 2 al lui 229
este -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