C # Bitvis operatører: AND, OR, XOR, komplement og skiftoperasjoner

I denne opplæringen vil vi lære i detalj om bitvise og bitskiftoperatører i C #. C # gir 4 bitvise og 2 bit skiftoperatører.

Bitvise og bitskiftoperatører brukes til å utføre bitnivåoperasjoner på heltall (int, long, etc) og boolske data. Disse operatørene brukes ikke ofte i virkelige situasjoner.

Hvis du er interessert i å utforske mer, kan du gå til praktiske anvendelser av bitvis operasjoner.

De bitvise og bitskiftoperatørene som er tilgjengelige i C #, er oppført nedenfor.

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

Bitvis ELLER

Bitvis ELLER operatør er representert av |. Den utfører bitvis ELLER operasjon på de tilsvarende bitene i to operander. Hvis noen av bitene er 1, blir resultatet 1. Ellers blir resultatet 0.

Hvis operandene er av type bool, tilsvarer bitvis ELLER-operasjon logisk ELLER-operasjon mellom dem.

For eksempel,

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

Bitvis ORdrift mellom 14 og 11:

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

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

14 | 11 = 15

Bitvis OG

Bitvis OG operatør er representert av &. Den utfører bitvis OG operasjon på de tilsvarende bitene i to operander. Hvis noen av bitene er 0, blir resultatet 0. Ellers blir resultatet 1.

Hvis operandene er av type bool, tilsvarer bitvis AND-operasjon logisk OG-operasjon mellom dem.

For eksempel,

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

Bitvis OG drift mellom 14 og 11:

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

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

 14 & 11 = 10

Bitvis XOR

Bitvis XOR-operatør er representert med ^. Den utfører bitvis XOR-operasjon på de tilsvarende bitene i to operander. Hvis de tilsvarende bitene er like , blir resultatet 0. Hvis de tilsvarende bitene er forskjellige , blir resultatet 1.

Hvis operandene er av type bool, tilsvarer bitvis XOR-operasjon logisk XOR-operasjon mellom dem.

For eksempel,

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

Bitvis XOR-drift mellom 14 og 11:

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

Hvis du vil ha mer informasjon om bruken av Bitwise XOR, kan du gå til 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 kjører programmet, vil utdataene være:

 14 11 = 5

Bitvis komplement

Bitwise komplement operatør er representert av ~. Det er en unarisk operatør, dvs. opererer på bare en operand. Den ~operatør inverterer hver bit vil si at endringer 1 til 0 og 0 eller 1.

For eksempel,

 26 = 00011010 (i binær)

Bitvis komplementoperasjon 26:

 ~ 00011010 = 11100101 = 229 (i desimal)

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

 ~ 26 = -27

Vi fikk - 27som produksjon da vi forventet 229. Hvorfor skjedde dette?

Det skjer fordi den binære verdien 11100101som vi forventer å være 229, faktisk er et 2-komplement representasjon av -27. Negative tall i datamaskinen er representert i 2s komplementrepresentasjon.

For ethvert heltall n vil 2s komplement av nvære -(n+1).

2-komplement
Desimal Binær 2's komplement
0 00000000 - (11111111 + 1) = -00000000 = -0 (i desimal)
1 00000001 - (11111110 + 1) = -11111111 = -256 (i desimal)
229 11100101 - (00011010 + 1) = -00011011 = -27

Overløpsverdier ignoreres i komplement fra 2.

Bitvis komplement av 26er 229 (i desimal) og 2 komplement av 229er -27. Derfor er produksjonen i -27stedet for 229.

Bitvis venstre skift

Bitvis venstre skiftoperatør er representert med <<. Den <<operatør forskyver et nummer til venstre med et gitt antall bit. Nuller legges til de minst viktige bitene.

I desimal tilsvarer det

 antall * 2biter

For eksempel,

 42 = 101010 (i binær)

Bitvis løfteskiftoperasjon 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 kjører programmet, vil utdataene være:

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

Bitvis høyre skift

Bitvis venstre skiftoperatør er representert med >>. Den >>operatør forskyver et nummer til høyre ved et gitt antall bit. Den første operanden forskyves til høyre av antall bits spesifisert av andre operand.

I desimal tilsvarer det

 etasje (antall / 2biter)

For eksempel,

 42 = 101010 (i binær)

Bitvis løfteskiftoperasjon 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øyre 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 kjører programmet, vil utdataene være:

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

Interessante artikler...