C # Bitvis operatörer: OCH, ELLER, XOR, komplement och skiftoperationer

I den här handledningen lär vi oss i detalj om bitvis och bitskiftoperatörer i C #. C # tillhandahåller 4 bitvis och 2 bitars skiftoperatorer.

Bitvisa och bitförskjutningsoperatorer används för att utföra bitnivåoperationer på heltal (int, lång, etc) och boolesk data. Dessa operatörer används inte ofta i verkliga situationer.

Om du är intresserad av att utforska mer, besök praktiska tillämpningar av bitvisa operationer.

De bitvisa och bitförskjutningsoperatorerna som finns tillgängliga i C # listas nedan.

Lista över C # bitvisa operatörer
Operatör Operatörens namn
~ Bitvis komplement
& Bitvis OCH
| Bitvis ELLER
^ Bitvis exklusiv ELLER (XOR)
<< Bitvis vänster skift
>> Bitvis högerförskjutning

Bitvis ELLER

Bitvis ELLER-operatör representeras av |. Den utför bitvis ELLER operation på motsvarande bitar i två operander. Om någon av bitarna är 1är resultatet 1. Annars blir resultatet 0.

Om operanderna är av typ boolmotsvarar bitvis ELLER-operationen logisk ELLER-operation mellan dem.

Till exempel,

 14 = 00001110 (i binär) 11 = 00001011 (i binär)

Bitvis ORdrift mellan 14 och 11:

 00001110 00001011 -------- 00001111 = 15 (i decimal)

Exempel 1: Bitvis ELLER

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

När vi kör programmet blir resultatet:

14 | 11 = 15

Bitvis OCH

Bitvis AND-operatör representeras av &. Den utför bitvis OCH-operation på motsvarande bitar i två operander. Om någon av bitarna är 0är resultatet 0. Annars blir resultatet 1.

Om operanderna är av typ bool, motsvarar bitvis OCH-operation logisk OCH-operation mellan dem.

Till exempel,

 14 = 00001110 (i binär) 11 = 00001011 (i binär)

Bitvis OCH drift mellan 14 och 11:

 00001110 00001011 -------- 00001010 = 10 (i decimal)

Exempel 2: Bitvis OCH

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

När vi kör programmet blir resultatet:

 14 & 11 = 10

Bitvis XOR

Bitvis XOR-operatör representeras av ^. Den utför bitvis XOR-operation på motsvarande bitar i två operander. Om motsvarande bitar är desamma blir resultatet 0. Om motsvarande bitar är olika är resultatet 1.

Om operanderna är av typ boolmotsvarar den bitvisa XOR-operationen logisk XOR-operation mellan dem.

Till exempel,

 14 = 00001110 (i binär) 11 = 00001011 (i binär)

Bitvis XOR-funktion mellan 14 och 11:

 00001110 00001011 -------- 00000101 = 5 (i decimal)

Om du vill veta mer om användningen av Bitwise XOR, besök The Magic of XOR

Exempel 3: Bitvis 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); ) ) ) 

När vi kör programmet blir resultatet:

 14 11 = 5

Bitvis komplement

Bitvis komplementoperatör representeras av ~. Det är en unary operatör, dvs fungerar endast på en operand. Den ~operatör inverterar varje bitar dvs ändrar 1 till 0 och 0 till 1.

Till exempel,

 26 = 00011010 (i binär)

Bitvis komplementoperation 26:

 ~ 00011010 = 11100101 = 229 (i decimal)

Exempel 4: Bitvis komplement

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

När vi kör programmet blir resultatet:

 ~ 26 = -27

Vi fick - 27som produktion när vi förväntade oss 229. Varför hände det här?

Det händer för att det binära värdet 11100101som vi förväntar oss 229är faktiskt en 2: s komplementrepresentation av -27. Negativa siffror i dator representeras i 2: s komplementrepresentation.

För alla heltal n kommer 2: s komplement av natt vara -(n+1).

2: s komplement
Decimal Binär 2: s komplement
0 00000000 - (11111111 + 1) = -00000000 = -0 (i decimal)
1 00000001 - (11111110 + 1) = -11111111 = -256 (i decimal)
229 11100101 - (00011010 + 1) = -00011011 = -27

Överflödesvärden ignoreras i 2: s komplement.

Det bitvisa komplementet av 26är 229 (i decimal) och 2: s komplement av 229är -27. Därför är produktionen -27istället för 229.

Bitvis vänster skift

Bitvis vänster skiftoperatör representeras av <<. Den <<operatör skiftar ett antal åt vänster av ett angivet antal bitar. Nollor läggs till de minst betydande bitarna.

I decimal motsvarar det

 antal * 2 bitar

Till exempel,

 42 = 101010 (i binär)

Bitvis lyftförskjutning på 42:

 42 << 1 = 84 (I binär 1010100) 42 << 2 = 168 (I binär 10101000) 42 << 4 = 672 (I binär 1010100000)

Exempel 5: Bitvis vänsterförskjutning

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

När vi kör programmet blir resultatet:

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

Bitvis högerförskjutning

Bitvis vänster skiftoperatör representeras av >>. Den >>Operatören flyttar ett nummer till höger med ett visst antal bitar. Den första operanden flyttas till höger av antalet bitar som specificeras av andra operanden.

I decimal motsvarar det

 våning (antal / 2 bitar)

Till exempel,

 42 = 101010 (i binär)

Bitvis lyftförskjutning på 42:

 42 >> 1 = 21 (I binär 010101) 42 >> 2 = 10 (I binär 001010) 42 >> 4 = 2 (I binär 000010)

Exempel 6: Bitvis högerförskjutning

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

När vi kör programmet blir resultatet:

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

Intressanta artiklar...