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)
OR
Operacja 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 - 27
jako wyjście, kiedy się spodziewaliśmy 229
. Dlaczego się to stało?
Dzieje się tak, ponieważ wartość binarna, 11100101
której oczekujemy, 229
jest 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 n
będzie -(n+1)
.
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 26
wynosi 229 (dziesiętnie), a dopełnienie do 2 229
to -27
. Stąd wyjście jest -27
zamiast 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