C # bitvise operatører: AND-, OR-, XOR-, komplement- og skiftoperationer

I denne vejledning lærer vi detaljeret om bitvise og bitforskydningsoperatorer i C #. C # giver 4 bitvise og 2 bit skiftoperatører.

Bitvise og bitforskydningsoperatorer bruges til at udføre bitniveauoperationer på heltal (int, lang osv.) Og boolske data. Disse operatører bruges ikke almindeligt i situationer i det virkelige liv.

Hvis du er interesseret i at udforske mere, kan du besøge praktiske anvendelser af bitvise operationer.

De bitvise og bitforskydningsoperatorer, der er tilgængelige i C #, er angivet nedenfor.

Liste over C # bitvise operatører
Operatør Operatørens navn
~ Bitvis komplement
& Bitvis OG
| Bitvis ELLER
^ Bitvis eksklusiv ELLER (XOR)
<< Bitvis venstre skift
>> Bitvis højre skift

Bitvis ELLER

Bitvis ELLER operator er repræsenteret af |. Den udfører bitvis ELLER operation på de tilsvarende bits i to operander. Hvis en af ​​bitene er 1, er resultatet 1. Ellers er resultatet 0.

Hvis operanderne er af typen bool, svarer bitvis ELLER-operation til logisk ELLER-operation mellem dem.

For eksempel,

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

Bitvis ORbetjening mellem 14 og 11:

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

Eksempel 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ører programmet, vil output være:

14 | 11 = 15

Bitvis OG

Bitvis OG-operator er repræsenteret af &. Den udfører bitvis OG-operation på de tilsvarende bits i to operander. Hvis en af ​​bitene er 0, er resultatet 0. Ellers er resultatet 1.

Hvis operanderne er af typen bool, svarer den bitvise AND-operation til logisk OG-operation mellem dem.

For eksempel,

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

Bitvis OG betjening mellem 14 og 11:

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

Eksempel 2: Bitvis OG

 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ører programmet, vil output være:

 14 & 11 = 10

Bitvis XOR

Bitvis XOR-operator er repræsenteret af ^. Den udfører bitvis XOR-operation på de tilsvarende bits i to operander. Hvis de tilsvarende bits er ens , er resultatet 0. Hvis de tilsvarende bits er forskellige , er resultatet 1.

Hvis operanderne er af typen bool, svarer den bitvise XOR-operation til en logisk XOR-operation mellem dem.

For eksempel,

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

Bitvis XOR-drift mellem 14 og 11:

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

Hvis du vil have mere at vide om brugen af ​​Bitwise XOR, skal du besøge The Magic of XOR

Eksempel 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ører programmet, vil output være:

 14 11 = 5

Bitvis komplement

Bitwise komplement operatør er repræsenteret af ~. Det er en unary operatør, dvs. opererer kun på en operand. Den ~operatør inverterer hver bits dvs. ændrer 1 til 0 og fra 0 til 1.

For eksempel,

 26 = 00011010 (i binær)

Bitvis komplement operation på 26:

 ~ 00011010 = 11100101 = 229 (i decimal)

Eksempel 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ører programmet, vil output være:

 ~ 26 = -27

Vi fik - 27som output, da vi forventede 229. Hvorfor skete dette?

Det sker, fordi den binære værdi, 11100101som vi forventer at være 229, faktisk er et 2's supplement repræsentation af -27. Negative tal i computeren er repræsenteret i 2's komplementrepræsentation.

For ethvert heltal n vil 2's komplement nvære -(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

Overløbsværdier ignoreres i komplement fra 2.

Det bitvise komplement af 26er 229 (i decimal) og 2'ens komplement af 229er -27. Derfor er output i -27stedet for 229.

Bitvis venstre skift

Bitvis venstre skiftoperatør er repræsenteret af <<. Den <<Operatøren skifter et tal til venstre ved et bestemt antal bits. Nuller tilføjes til de mindst betydningsfulde bits.

I decimal svarer det til

 antal * 2bits

For eksempel,

 42 = 101010 (i binær)

Bitvis Lift Shift-betjening på 42:

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

Eksempel 5: Bitvis venstre skift

 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ører programmet, vil output være:

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

Bitvis højre skift

Bitvis venstre skiftoperatør er repræsenteret af >>. Den >>Operatøren skifter et nummer til højre ved en bestemt antal bits. Den første operand skiftes til højre af antallet af bits, der er specificeret af anden operand.

I decimal svarer det til

 etage (antal / 2bits)

For eksempel,

 42 = 101010 (i binær)

Bitvis Lift Shift-betjening på 42:

 42 >> 1 = 21 (i binær 010101) 42 >> 2 = 10 (i binær 001010) 42 >> 4 = 2 (i binær 000010)

Eksempel 6: Bitvis højre skift

 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ører programmet, vil output være:

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

Interessante artikler...