В този урок ще научим подробно за битовите и битовите оператори за смяна на битове в C #. C # осигурява 4-битови и 2-битови оператори за смяна.
Операторите на битови и битови смени се използват за извършване на операции на битово ниво върху цели числа (int, long и т.н.) и булеви данни. Тези оператори не се използват често в реални ситуации.
Ако се интересувате да изследвате повече, посетете практически приложения на битови операции.
Побитовите и битови оператори за смяна на бита, налични в C #, са изброени по-долу.
Списък на C # битови операториОператор | Име на оператора |
---|---|
~ | Побитово допълнение |
& | Побитово И |
| | Побитово ИЛИ |
^ | Изключително побитово ИЛИ (XOR) |
<< | Побитово ляво изместване |
>> | Побитово дясно изместване |
Побитово ИЛИ
Побитовият оператор OR е представен от |
. Той изпълнява битова операция ИЛИ върху съответните битове на два операнда. Ако някой от битовете е 1
, резултатът е 1
. В противен случай резултатът е 0
.
Ако операндите са от тип bool
, битовата операция ИЛИ е еквивалентна на логическа операция ИЛИ между тях.
Например,
14 = 00001110 (в двоична) 11 = 00001011 (в двоична)
Побитова OR
операция между 14 и 11:
00001110 00001011 -------- 00001111 = 15 (в десетични)
Пример 1: Побитово ИЛИ
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); ) ) )
Когато стартираме програмата, изходът ще бъде:
14 | 11 = 15
Побитово И
Побитовият оператор И е представен от &
. Той изпълнява битова операция И на съответните битове на два операнда. Ако някой от битовете е 0
, резултатът е 0
. В противен случай резултатът е 1
.
Ако операндите са от тип bool
, битовата операция И е еквивалентна на логическа операция И между тях.
Например,
14 = 00001110 (в двоична) 11 = 00001011 (в двоична)
Побитово И операция между 14 и 11:
00001110 00001011 -------- 00001010 = 10 (в десетични)
Пример 2: Побитово И
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); ) ) )
Когато стартираме програмата, изходът ще бъде:
14 и 11 = 10
Побитово XOR
Побитовият XOR оператор е представен от ^
. Той изпълнява битова XOR операция върху съответните битове на два операнда. Ако съответните битове са еднакви , резултатът е 0
. Ако съответните битове са различни , резултатът е 1
.
Ако операндите са от тип bool
, битовата XOR операция е еквивалентна на логическа XOR операция между тях.
Например,
14 = 00001110 (в двоична) 11 = 00001011 (в двоична)
Побитова XOR операция между 14 и 11:
00001110 00001011 -------- 00000101 = 5 (в десетични)
Ако искате да научите повече за използването на Bitwise XOR, посетете The Magic of XOR
Пример 3: Побитов 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); ) ) )
Когато стартираме програмата, изходът ще бъде:
14 11 = 5
Побитово допълнение
Bitwise Complement operator is represented by ~
. It is a unary operator, i.e. operates on only one operand. The ~
operator inverts each bits i.e. changes 1 to 0 and 0 to 1.
For Example,
26 = 00011010 (In Binary)
Bitwise Complement operation on 26:
~ 00011010 = 11100101 = 229 (In Decimal)
Example 4: Bitwise Complement
using System; namespace Operator ( class BitWiseComplement ( public static void Main(string() args) ( int number = 26, result; result = ~number; Console.WriteLine("~(0) = (1)", number, result); ) ) )
When we run the program, the output will be:
~26 = -27
We got -27
as output when we were expecting 229
. Why did this happen?
It happens because the binary value 11100101
which we expect to be 229
is actually a 2's complement representation of -27
. Negative numbers in computer are represented in 2's complement representation.
For any integer n, 2's complement of n
will be -(n+1)
.
Десетична | Двоична | Допълнение 2 |
---|---|---|
0 | 00000000 | - (11111111 + 1) = -00000000 = -0 (в десетични) |
1 | 00000001 | - (11111110 + 1) = -11111111 = -256 (в десетични) |
229 | 11100101 | - (00011010 + 1) = -00011011 = -27 |
Стойностите за препълване се игнорират в допълнението на 2.
Побитовото допълнение на 26
е 229 (в десетични знаци) и допълнението на 2 на 229
е -27
. Следователно изходът е -27
вместо 229
.
Побитово ляво изместване
Побитовият оператор на лява смяна е представен от <<
. На <<
оператора се измества редица вляво от определен брой битове. Нулите се добавят към най-малко значимите битове.
В десетичен знак е еквивалентно на
брой * 2 бита
Например,
42 = 101010 (в двоичен формат)
Побитово повдигане Shift операция на 42:
42 << 1 = 84 (в двоичен 1010100) 42 << 2 = 168 (в двоичен 10101000) 42 << 4 = 672 (в двоичен 1010100000)
Пример 5: Побитово ляво отместване
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); ) ) )
Когато стартираме програмата, изходът ще бъде:
42 << 1 = 84 42 << 2 = 168 42 << 4 = 672
Побитово дясно изместване
Побитовият оператор на лява смяна е представен от >>
. На >>
оператора се измества редица вдясно от определен брой битове. Първият операнд се измества надясно с броя на битовете, посочени от втория операнд.
В десетичен знак е еквивалентно на
етаж (брой / 2 бита)
Например,
42 = 101010 (в двоичен формат)
Побитово повдигане Shift операция на 42:
42 >> 1 = 21 (в двоична 010101) 42 >> 2 = 10 (в двоична 001010) 42 >> 4 = 2 (в двоична 000010)
Пример 6: Побитово дясно изместване
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); ) ) )
Когато стартираме програмата, изходът ще бъде:
42 >> 1 = 21 42 >> 2 = 10 42 >> 4 = 2