C # Bitwise-operators: AND-, OR-, XOR-, complement- en shiftbewerkingen

In deze tutorial zullen we in detail leren over bitwise en bit shift operators in C #. C # biedt 4 bitsgewijze en 2 bits verschuivingsoperatoren.

Bitwise en bit shift-operators worden gebruikt om bewerkingen op bitniveau uit te voeren op integer (int, long, etc.) en booleaanse gegevens. Deze operators worden niet vaak gebruikt in praktijksituaties.

Als je meer wilt ontdekken, bezoek dan praktische toepassingen van bitsgewijze bewerkingen.

De bitsgewijze en bitverschuivingsoperatoren die beschikbaar zijn in C # worden hieronder vermeld.

Lijst met C # Bitwise-operators
Operator Naam operator
~ Bitsgewijze aanvulling
& Bitwise EN
| Bitsgewijs OF
^ Bitwise Exclusief OF (XOR)
<< Bitsgewijs naar links verschuiven
>> Bitwise Right Shift

Bitsgewijs OF

Bitwise OR-operator wordt vertegenwoordigd door |. Het voert een bitsgewijze OR-bewerking uit op de corresponderende bits van twee operanden. Als een van de bits is 1, is het resultaat 1. Anders is het resultaat 0.

Als de operanden van het type zijn bool, is de bitsgewijze OR-bewerking gelijk aan de logische OR-bewerking ertussen.

Bijvoorbeeld,

 14 = 00001110 (in binair) 11 = 00001011 (in binair)

Bitsgewijze ORbewerking tussen 14 en 11:

 00001110 00001011 -------- 00001111 = 15 (in decimaal)

Voorbeeld 1: Bitwise OR

 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); ) ) ) 

Wanneer we het programma uitvoeren, is de uitvoer:

14 | 11 = 15

Bitwise EN

Bitwise AND-operator wordt vertegenwoordigd door &. Het voert een bitsgewijze EN-bewerking uit op de overeenkomstige bits van twee operanden. Als een van de bits is 0, is het resultaat 0. Anders is het resultaat 1.

Als de operanden van het type zijn bool, is de bitsgewijze EN-bewerking equivalent aan de logische EN-bewerking ertussen.

Bijvoorbeeld,

 14 = 00001110 (in binair) 11 = 00001011 (in binair)

Bitsgewijze EN-bewerking tussen 14 en 11:

 00001110 00001011 -------- 00001010 = 10 (in decimaal)

Voorbeeld 2: Bitwise AND

 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); ) ) ) 

Wanneer we het programma uitvoeren, is de uitvoer:

 14 en 11 = 10

Bitsgewijze XOR

Bitwise XOR-operator wordt vertegenwoordigd door ^. Het voert bitsgewijze XOR-bewerking uit op de overeenkomstige bits van twee operanden. Als de overeenkomstige bits hetzelfde zijn , is het resultaat 0. Als de corresponderende bits verschillend zijn , is het resultaat 1.

Als de operanden van het type zijn bool, is de bitsgewijze XOR-bewerking equivalent aan de logische XOR-bewerking ertussen.

Bijvoorbeeld,

 14 = 00001110 (in binair) 11 = 00001011 (in binair)

Bitsgewijze XOR-bewerking tussen 14 en 11:

 00001110 00001011 -------- 00000101 = 5 (in decimaal)

Als je meer wilt weten over het gebruik van Bitwise XOR, bezoek dan The Magic of XOR

Voorbeeld 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); ) ) ) 

Wanneer we het programma uitvoeren, is de uitvoer:

 14 11 = 5

Bitsgewijze aanvulling

Bitwise Complement-operator wordt vertegenwoordigd door ~. Het is een unaire operator, dwz werkt op slechts één operand. De ~operator keert elke bit om, dwz verandert 1 in 0 en 0 in 1.

Bijvoorbeeld,

 26 = 00011010 (in binair)

Bitwise Complement-bewerking op 26:

 ~ 00011010 = 11100101 = 229 (in decimaal)

Voorbeeld 4: bitsgewijze aanvulling

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

Wanneer we het programma uitvoeren, is de uitvoer:

 ~ 26 = -27

We kregen - 27als output toen we verwachtten 229. Waarom is dit gebeurd?

Het gebeurt omdat de binaire waarde 11100101die we verwachten te zijn 229eigenlijk een 2-complement representatie is van -27. Negatieve getallen in de computer worden weergegeven in de complementweergave van 2.

Voor elk geheel getal n zal het complement van 2 nzijn -(n+1).

2-complement
Decimale Binair 2's aanvulling
0 00000000 - (11111111 + 1) = -00000000 = -0 (in decimaal)
1 00000001 - (11111110 + 1) = -11111111 = -256 (in decimaal)
229 11100101 - (00011010 + 1) = -00011011 = -27

Overloopwaarden worden genegeerd in het complement van 2.

Het bitsgewijze complement van 26is 229 (in decimaal) en het 2-complement van 229is -27. Daarom is de output in -27plaats van 229.

Bitsgewijs naar links verschuiven

Bitsgewijze linker shift-operator wordt vertegenwoordigd door <<. De <<operator verschuift een getal naar links met een bepaald aantal bits. Nullen worden toegevoegd aan de minst significante bits.

In decimaal is het gelijk aan

 aantal * 2 bits

Bijvoorbeeld,

 42 = 101010 (in binair)

Bitwise Lift Shift-bewerking op 42:

 42 << 1 = 84 (in binair 1010100) 42 << 2 = 168 (in binair 10101000) 42 << 4 = 672 (in binair 1010100000)

Voorbeeld 5: Bitwise Left Shift

 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); ) ) ) 

Wanneer we het programma uitvoeren, is de uitvoer:

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

Bitwise Right Shift

Bitsgewijze linker shift-operator wordt vertegenwoordigd door >>. De >>operator verschuift een getal een bepaald aantal bits naar rechts. De eerste operand wordt naar rechts verschoven met het aantal bits dat is gespecificeerd door de tweede operand.

In decimaal is het gelijk aan

 verdieping (aantal / 2 bits)

Bijvoorbeeld,

 42 = 101010 (in binair)

Bitwise Lift Shift-bewerking op 42:

 42 >> 1 = 21 (in binair 010101) 42 >> 2 = 10 (in binair 001010) 42 >> 4 = 2 (in binair 000010)

Voorbeeld 6: Bitwise Right Shift

 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); ) ) ) 

Wanneer we het programma uitvoeren, is de uitvoer:

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

Interessante artikelen...