В этом руководстве мы подробно узнаем о побитовых операторах и операторах битового сдвига в 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, побитовая операция И эквивалентна логической операции И между ними.
Например,
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 над соответствующими битами двух операндов. Если соответствующие биты совпадают , результат будет 0. Если соответствующие биты различны , результат будет 1.
Если операнды имеют тип bool, побитовая операция XOR эквивалентна логической операции XOR между ними.
Например,
14 = 00001110 (двоичный) 11 = 00001011 (двоичный)
Побитовая операция XOR между 14 и 11:
00001110 00001011 -------- 00000101 = 5 (в десятичной системе)
Если вы хотите больше узнать об использовании побитового XOR, посетите The Magic of XOR
Пример 3: побитовое исключающее ИЛИ
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 |
|---|---|---|
| 0 | 00000000 | - (11111111 + 1) = -00000000 = -0 (в десятичной системе) |
| 1 | 00000001 | - (11111110 + 1) = -11111111 = -256 (в десятичной системе) |
| 229 | 11100101 | - (00011010 + 1) = -00011011 = -27 |
Значения переполнения игнорируются в дополнении до 2.
Поразрядное дополнение 26- 229 (в десятичной системе), а двойное дополнение 229- -27. Следовательно, вывод -27вместо 229.
Побитовый сдвиг влево
Оператор побитового сдвига влево представлен как <<. <<Оператор сдвигает число влево на заданное число бит. К младшим битам добавляются нули.
В десятичном виде это эквивалентно
число * 2 бита
Например,
42 = 101010 (в двоичном формате)
Побитовая операция сдвига подъема на 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 (в двоичном формате)
Побитовая операция сдвига подъема на 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








