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 OR
rad 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 - 27
kao izlaz kad smo očekivali 229
. Zašto se to dogodilo?
To se događa zato što je binarna vrijednost za 11100101
koju očekujemo da 229
je 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)
.
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 26
je 229 (u decimalnom obliku), a dodatak 2 u obliku 229
je -27
. Stoga je izlaz -27
umjesto 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