C # Побитови оператори: И, ИЛИ, XOR, Допълване и Операции за смяна

В този урок ще научим подробно за битовите и битовите оператори за смяна на битове в 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 допълнение
Десетична Двоична Допълнение 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

Интересни статии...