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ørerOperatø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 OR
betjening 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 - 27
som output, da vi forventede 229
. Hvorfor skete dette?
Det sker, fordi den binære værdi, 11100101
som 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 n
være -(n+1)
.
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 26
er 229 (i decimal) og 2'ens komplement af 229
er -27
. Derfor er output i -27
stedet 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