C # Bitovni operatori: I, ILI, XOR, komplementarne i Shift operacije

U ovom uputstvu detaljno ćemo naučiti o bitnim i operatorima pomaka bita u C #. C # pruža 4 bitna i 2 bitna operatora pomaka.

Operatori bit-a i pomaka bita koriste se za izvođenje operacija na razini bita na cijelim brojevima (int, long itd.) I logičkim podacima. Ovi se operateri često ne koriste u stvarnim životnim situacijama.

Ako ste zainteresirani za istraživanje više, posjetite praktične primjene bitnih operacija.

Bitovni i pomaci pomaka bitova dostupni u C # navedeni su u nastavku.

Popis bitnih operatora C #
Operater Ime operatora
~ Bitni dodatak
& Bitno I
| Bitno ILI
^ Bitno ekskluzivno ILI (XOR)
<< Pomicanje ulijevo ulijevo
>> Pomicanje udesno udesno

Bitno ILI

Bitni ILI operator predstavlja |. Izvodi bitovnu ILI operaciju na odgovarajućim bitovima dvaju operanda. Ako je bilo koji od bitova 1, rezultat je 1. Inače je rezultat 0.

Ako su operandi tipa bool, bitna ILI operacija jednaka je logičkoj ILI operaciji između njih.

Na primjer,

 14 = 00001110 (u binarnom) 11 = 00001011 (u binarnom)

Bitovni ORrad između 14 i 11:

 00001110 00001011 -------- 00001111 = 15 (u decimalama)

Primjer 1: Bitno ILI

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

Kada pokrenemo program, izlaz će biti:

14 | 11 = 15

Bitno I

Bitni operator AND predstavljen je s &. Izvodi bitovnu I operaciju na odgovarajućim bitovima dvaju operanda. Ako je bilo koji od bitova 0, rezultat je 0. Inače je rezultat 1.

Ako su operandi tipa bool, bitna operacija AND jednaka je logičkoj operaciji AND između njih.

Na primjer,

 14 = 00001110 (u binarnom) 11 = 00001011 (u binarnom)

Bitni I rad između 14 i 11:

 00001110 00001011 -------- 00001010 = 10 (u decimalnom znaku)

Primjer 2: Bitno I

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

Kada pokrenemo program, izlaz će biti:

 14 i 11 = 10

Bitno XOR

Bitno XOR operator predstavlja ^. Izvodi bitnu XOR operaciju na odgovarajućim bitovima dvaju operanda. Ako su odgovarajući bitovi isti , rezultat je 0. Ako su odgovarajući bitovi različiti , rezultat je 1.

Ako su operandi tipa bool, bitna XOR operacija jednaka je logičkoj XOR operaciji između njih.

Na primjer,

 14 = 00001110 (u binarnom) 11 = 00001011 (u binarnom)

Bitni XOR rad između 14 i 11:

 00001110 00001011 -------- 00000101 = 5 (u decimalnom znaku)

Ako želite saznati više o uporabi Bitwise XOR-a, posjetite The Magic of XOR

Primjer 3: Bitni 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); ) ) ) 

Kada pokrenemo program, izlaz će biti:

 14 11 = 5

Bitni dodatak

Operator bitnog komplementa predstavljen je s ~. Unarni je operator, tj. Operira na samo jednom operandu. ~Operater izvrće svaki bita odnosno na promjene 1-0 i 0 do 1.

Na primjer,

 26 = 00011010 (u binarnom obliku)

Bit-operacija komplementa na 26:

 ~ 00011010 = 11100101 = 229 (u decimalama)

Primjer 4: Bitni dodatak

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

Kada pokrenemo program, izlaz će biti:

 ~ 26 = -27

Dobili smo - 27kao izlaz kad smo očekivali 229. Zašto se to dogodilo?

To se događa zato što je binarna vrijednost za 11100101koju očekujemo da 229je zapravo komplementarni prikaz dvojke -27. Negativni brojevi u računalu predstavljeni su u prikazu komplementa 2.

Za bilo koji cjelobrojni n, dopuna 2 nće biti -(n+1).

Dopuna 2
Decimal Binarni Dopuna 2
0 00000000 - (11111111 + 1) = -00000000 = -0 (u decimalnom obliku)
1 00000001 - (11111110 + 1) = -11111111 = -256 (u decimalnom znaku)
229 11100101 - (00011010 + 1) = -00011011 = -27

Vrijednosti prelijevanja zanemaruju se u kompletu 2.

Dopunski dodatak u bitima 26je 229 (u decimalnom obliku), a dodatak 2 u obliku 229je -27. Stoga je izlaz -27umjesto 229.

Pomicanje ulijevo ulijevo

Bitni lijevi pomak operatora predstavljen je s <<. <<Operater prebacuje broj na lijevo od određenog broja bitova. Numere se dodaju najmanje značajnim bitovima.

U decimalu je ekvivalentan

 num * 2bita

Na primjer,

 42 = 101010 (u binarnom obliku)

Pomicanje u smjeru podizanja na 42:

 42 << 1 = 84 (u binarnom 1010100) 42 << 2 = 168 (u binarnom 10101000) 42 << 4 = 672 (u binarnom 1010100000)

Primjer 5: Pomak ulijevo ulijevo

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

Kada pokrenemo program, izlaz će biti:

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

Pomicanje udesno udesno

Bitni lijevi pomak operatora predstavljen je s >>. >>Operater prebacuje broj na desnoj strane određenog broja bitova. Prvi operand pomaknut je udesno za broj bitova koji je specificiran drugim operandom.

U decimalu je ekvivalentan

 kat (broj / 2 bita)

Na primjer,

 42 = 101010 (u binarnom obliku)

Pomicanje u smjeru podizanja na 42:

 42 >> 1 = 21 (u binarnom 010101) 42 >> 2 = 10 (u binarnom 001010) 42 >> 4 = 2 (u binarnom 000010)

Primjer 6: Pomicanje udesno udesno

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

Kada pokrenemo program, izlaz će biti:

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

Zanimljivi članci...