C # Operatori pa bitēm: AND, OR, XOR, papildināšanas un maiņas darbības

Šajā apmācībā mēs detalizēti uzzināsim par bitu un bitu nobīdes operatoriem C #. C # nodrošina 4 bitu un 2 bitu nobīdes operatorus.

Bitu un bitu maiņas operatorus izmanto, lai veiktu bitu līmeņa darbības ar veselu skaitli (int, long utt.) Un Būla datiem. Šie operatori parasti netiek izmantoti reālās dzīves situācijās.

Ja jūs vēlaties uzzināt vairāk, apmeklējiet praktiskas bitdarbības darbības.

Zemāk ir uzskaitīti bitu un bitu maiņas operatori, kas pieejami C #.

Operatoru C # Bitwise saraksts
Operators Operatora nosaukums
~ Bitwise papildinājums
& Bitu virzienā UN
| Bitwise OR
^ Bitu pārraides ekskluzīvs VAI (XOR)
<< Pa kreisi Shift
>> Pa labi pa labi

Bitwise OR

Operatoru Bitwise OR pārstāv |. Tas veic operāciju pa bitiem VAI divu operandu attiecīgajiem bitiem. Ja kāds no bitiem ir 1, rezultāts ir 1. Pretējā gadījumā rezultāts ir 0.

Ja operandi ir tipa bool, operācija bitu bitu režīmā ir līdzvērtīga loģiskai VAI operācijai starp tām.

Piemēram,

 14 = 00001110 (binārā) 11 = 00001011 (binārā)

ORDarbība pa bitēm starp 14 un 11:

 00001110 00001011 -------- 00001111 = 15 (aiz komata)

1. piemērs

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

Kad mēs palaidīsim programmu, izeja būs:

14 | 11 = 15

Bitu virzienā UN

Operatoru Bitwise AND attēlo &. Tas veic bitu un operāciju ar atbilstošajiem divu operandu bitiem. Ja kāds no bitiem ir 0, rezultāts ir 0. Pretējā gadījumā rezultāts ir 1.

Ja operandi ir tipa bool, bitu darbība AND ir ekvivalenta loģiskajai UN operācijai starp tām.

Piemēram,

 14 = 00001110 (binārā) 11 = 00001011 (binārā)

Bitu pa vidu UN darbība starp 14 un 11:

 00001110 00001011 -------- 00001010 = 10 (aiz komata)

2. piemērs

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

Kad mēs palaidīsim programmu, izeja būs:

 14 un 11 = 10

Bitor XOR

Operatoru Bitwise XOR attēlo ^. Tas veic XOR darbību bitu bitu pa diviem operandu atbilstošajiem bitiem. Ja atbilstošie biti ir vienādi , rezultāts ir 0. Ja attiecīgie biti ir atšķirīgi , rezultāts ir 1.

Ja operandi ir tipa bool, bitu darbības XOR darbība ir ekvivalenta loģiskai XOR operācijai starp tām.

Piemēram,

 14 = 00001110 (binārā) 11 = 00001011 (binārā)

Bitor XOR darbība starp 14 un 11:

 00001110 00001011 -------- 00000101 = 5 (aiz komata)

Ja vēlaties uzzināt vairāk par Bitwise XOR lietošanu, apmeklējiet vietni The Magic of XOR

3. piemērs: Bitor 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); ) ) ) 

Kad mēs palaidīsim programmu, izeja būs:

 14 11 = 5

Bitwise papildinājums

Operatoru Bitwise Complement pārstāv ~. Tas ir unikāls operators, ti, darbojas tikai vienā operandā. ~Operators apgriež katru biti ti izdarīt izmaiņas 1-0 un 0 līdz 1.

Piemēram,

 26 = 00011010 (binārā formātā)

Bitwise Complement darbība ar 26:

 ~ 00011010 = 11100101 = 229 (aiz komata)

4. piemērs: papildinājums pa bitiem

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

Kad mēs palaidīsim programmu, izeja būs:

 ~ 26 = -27

Mēs saņēmām - 27kā rezultātu, kad gaidījām 229. Kāpēc tas notika?

Tas notiek tāpēc, ka binārā vērtība, 11100101kuru mēs sagaidām, 229faktiski ir 2 papildinājums -27. Negatīvie skaitļi datorā tiek attēloti 2 papildinājumu attēlojumā.

Jebkuram veselam skaitlim n nbūs 2 papildinājums -(n+1).

2. papildinājums
Decimālskaitlis Binārs 2. papildinājums
0 00000000 - (11111111 + 1) = -00000000 = -0 (aiz komata)
1 00000001 - (11111110 + 1) = -11111111 = -256 (aiz komata)
229 11100101 - (00011010 + 1) = -00011011 = -27

Pārpildes vērtības tiek ignorētas 2. papildinājumā.

Bitu bitu papildinājums 26ir 229 (decimāldaļās) un 2 papildinājums 229ir -27. Tādējādi izeja ir -27nevis 229.

Pa kreisi Shift

Bitu kustības kreisās maiņas operatoru attēlo <<. <<Operators maiņās numuru pa kreisi ar noteiktu skaitu bitu. Nulles tiek pievienotas vismazāk nozīmīgajiem bitiem.

Pēc komata tas ir ekvivalents

 num * 2biti

Piemēram,

 42 = 101010 (binārā formātā)

Darbība ar bitu kustības maiņu uz 42:

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

5. piemērs: Bitu pa kreisi nobīde

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

Kad mēs palaidīsim programmu, izeja būs:

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

Pa labi pa labi

Bitu kustības kreisās maiņas operatoru attēlo >>. >>Operators maiņās numuru uz labo pusi ar noteiktu skaitu bitu. Pirmais operands tiek nobīdīts pa labi par otrā operanda norādīto bitu skaitu.

Pēc komata tas ir ekvivalents

 stāvs (num / 2bits)

Piemēram,

 42 = 101010 (binārā formātā)

Darbība ar bitu kustības maiņu uz 42:

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

6. piemērs: Bitu kustība pa labi

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

Kad mēs palaidīsim programmu, izeja būs:

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

Interesanti raksti...