Побітові оператори C #: І, АБО, XOR, операції доповнення та зсуву

У цьому підручнику ми детально дізнаємося про побітові оператори та оператори зсуву бітів у C #. C # надає 4 бітові та 2 бітові оператори зсуву.

Побітові та бітові оператори зсуву використовуються для виконання операцій бітового рівня над цілими (int, long тощо) та логічними даними. Ці оператори зазвичай не використовуються в реальних життєвих ситуаціях.

Якщо вам цікаво вивчити більше, відвідайте практичні програми побітових операцій.

Побітові та бітові оператори зсуву, доступні в C #, перелічені нижче.

Список побітових операторів C #
Оператор Ім'я оператора
~ Побітове доповнення
& Побітове І
| Побітове АБО
^ Побітовий ексклюзив АБО (XOR)
<< Побітовий лівий зсув
>> Побітове зрушення вправо

Побітове АБО

Побітовий оператор АБО представлений |. Він виконує розрядні операції АБО над відповідними бітами двох операндів. Якщо один із бітів є 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, побітова операція AND еквівалентна логічній операції AND між ними.

Наприклад,

 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

Побітове доповнення

Побітовий оператор доповнення представлений ~. Це одинарний оператор, тобто працює лише з одним операндом. ~Оператор інвертує кожен біт тобто зміни від 1 до 0 і від 0 до 1.

Наприклад,

 26 = 00011010 (у двійковій формі)

Операція побітового доповнення 26:

 ~ 00011010 = 11100101 = 229 (десяткове число)

Приклад 4: Побітове доповнення

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

Коли ми запускаємо програму, результат буде:

 ~ 26 = -27

Ми отримали - 27як результат, коли очікували 229. Чому це сталося?

Це трапляється тому, що двійкове значення, 11100101яке ми очікуємо 229, насправді є доповненням 2 -27. Негативні числа в комп’ютері представлені у поданні доповнення 2.

Для будь-якого цілого числа n доповнення 2 nбуде -(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

Цікаві статті...