Operatory bitowe C #: AND, OR, XOR, operacje dopełniania i przesunięcia

W tym samouczku dowiemy się szczegółowo o operatorach bitowych i przesunięć bitowych w języku C #. C # udostępnia 4 bitowe i 2 bitowe operatory przesunięcia.

Operatory bitowe i przesunięcia bitowe są używane do wykonywania operacji na poziomie bitów na danych całkowitych (int, long itp.) I logicznych. Operatory te nie są powszechnie używane w rzeczywistych sytuacjach.

Jeśli chcesz dowiedzieć się więcej, odwiedź praktyczne zastosowania operacji bitowych.

Operatory bitowe i przesunięcia bitowe dostępne w C # są wymienione poniżej.

Lista operatorów bitowych języka C #
Operator Imię operatora
~ Uzupełnienie bitowe
& Bitowe i
| Bitowe OR
^ Bitwise Exclusive OR (XOR)
<< Przesunięcie bitowe w lewo
>> Bitowe przesunięcie w prawo

Bitowe OR

Operator bitowego OR jest reprezentowany przez |. Wykonuje operację bitową OR na odpowiednich bitach dwóch operandów. Jeśli którykolwiek z bitów to 1, wynikiem jest 1. W przeciwnym razie wynik jest 0.

Jeśli operandy są typu bool, bitowa operacja OR jest równoważna logicznej operacji OR między nimi.

Na przykład,

 14 = 00001110 (binarnie) 11 = 00001011 (binarnie)

OROperacja bitowa między 14 a 11:

 00001110 00001011 -------- 00001111 = 15 (dziesiętnie)

Przykład 1: bitowe OR

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

Kiedy uruchomimy program, wynik będzie:

14 | 11 = 15

Bitowe i

Operator bitowego AND jest reprezentowany przez &. Wykonuje operację bitową AND na odpowiednich bitach dwóch operandów. Jeśli którykolwiek z bitów to 0, wynikiem jest 0. W przeciwnym razie wynik jest 1.

Jeśli operandy są typu bool, operacja bitowa AND jest równoważna operacji logicznej AND między nimi.

Na przykład,

 14 = 00001110 (binarnie) 11 = 00001011 (binarnie)

Operacja bitowa AND między 14 a 11:

 00001110 00001011 -------- 00001010 = 10 (dziesiętnie)

Przykład 2: bitowe AND

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

Kiedy uruchomimy program, wynik będzie:

 14 i 11 = 10

Bitowe XOR

Bitowy operator XOR jest reprezentowany przez ^. Wykonuje bitową operację XOR na odpowiednich bitach dwóch operandów. Jeśli odpowiednie bity są takie same , wynikiem jest 0. Jeśli odpowiednie bity są różne , wynikiem jest 1.

Jeśli operandy są typu bool, bitowa operacja XOR jest równoważna logicznej operacji XOR między nimi.

Na przykład,

 14 = 00001110 (binarnie) 11 = 00001011 (binarnie)

Bitowa operacja XOR między 14 a 11:

 00001110 00001011 -------- 00000101 = 5 (dziesiętnie)

Jeśli chcesz dowiedzieć się więcej o korzystaniu z Bitwise XOR, odwiedź The Magic of XOR

Przykład 3: Bitowe 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); ) ) ) 

Kiedy uruchomimy program, wynik będzie:

 14 11 = 5

Uzupełnienie bitowe

Operator dopełniacza bitowego jest reprezentowany przez ~. Jest operatorem jednoargumentowym, tzn. Operuje tylko na jednym operandzie. ~Operatora odwraca każdy bitów mianowicie zmiany z 1 na 0 i 0 1.

Na przykład,

 26 = 00011010 (binarnie)

Operacja dopełniania bitowego na 26:

 ~ 00011010 = 11100101 = 229 (dziesiętnie)

Przykład 4: dopełnienie bitowe

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

Kiedy uruchomimy program, wynik będzie:

 ~ 26 = -27

Otrzymaliśmy - 27jako wyjście, kiedy się spodziewaliśmy 229. Dlaczego się to stało?

Dzieje się tak, ponieważ wartość binarna, 11100101której oczekujemy, 229jest w rzeczywistości reprezentacją dopełnienia do 2 -27. Liczby ujemne w komputerze są reprezentowane w uzupełnieniu do 2.

Dla dowolnej liczby całkowitej n uzupełnienie do 2 nbędzie -(n+1).

Uzupełnienie 2
Dziesiętny Dwójkowy Uzupełnienie 2
0 00000000 - (11111111 + 1) = -00000000 = -0 (dziesiętnie)
1 00000001 - (11111110 + 1) = -11111111 = -256 (dziesiętnie)
229 11100101 - (00011010 + 1) = -00011011 = -27

Wartości przepełnienia są ignorowane w uzupełnieniu do dwójki.

Uzupełnienie bitowe do 26wynosi 229 (dziesiętnie), a dopełnienie do 2 229to -27. Stąd wyjście jest -27zamiast 229.

Przesunięcie bitowe w lewo

Operator przesunięcia bitowego w lewo jest reprezentowany przez <<. <<Operator przesuwa liczbę w lewo o określonej liczbie bitów. Do najmniej znaczących bitów dodawane są zera.

W liczbach dziesiętnych odpowiada

 num * 2bits

Na przykład,

 42 = 101010 (binarnie)

Operacja Bitwise Lift Shift na 42:

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

Przykład 5: Bitowe przesunięcie w lewo

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

Kiedy uruchomimy program, wynik będzie:

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

Bitowe przesunięcie w prawo

Operator przesunięcia bitowego w lewo jest reprezentowany przez >>. >>Operator zmienia numer na prawo od określonej liczby bitów. Pierwszy operand jest przesuwany w prawo o liczbę bitów określoną przez drugi argument.

W liczbach dziesiętnych odpowiada

 piętro (liczba / 2 bity)

Na przykład,

 42 = 101010 (binarnie)

Operacja Bitwise Lift Shift na 42:

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

Przykład 6: Bitowe przesunięcie w prawo

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

Kiedy uruchomimy program, wynik będzie:

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

Interesujące artykuły...