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ørerOperatø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 OR
drift 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 - 27
som produksjon da vi forventet 229
. Hvorfor skjedde dette?
Det skjer fordi den binære verdien 11100101
som 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 n
være -(n+1)
.
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 26
er 229 (i desimal) og 2 komplement av 229
er -27
. Derfor er produksjonen i -27
stedet 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