Побитовые операторы C# и операторы сдвига битов
Побитовые операторы C# и операторы сдвига битов
В этом руководстве мы подробно узнаем об операторах побитового сдвига и побитового сдвига в C#. C# предоставляет 4 побитовых и 2 побитовых оператора сдвига.
Побитовые операторы и операторы сдвига битов используются для выполнения операций на уровне битов с целыми (int, long и т. д.) и логическими данными. Эти операторы обычно не используются в реальных жизненных ситуациях.
Если вам интересно узнать больше, посетите страницу практического применения побитовых операций.
Ниже перечислены побитовые операторы и операторы сдвига битов, доступные в C#.
| Оператор | Имя оператора |
|---|---|
| ~ | Побитовое дополнение |
| & | Побитовое И |
| | | Побитовое ИЛИ |
| ^ | Побитовое исключающее ИЛИ (XOR) |
| < | Побитовый сдвиг влево |
| >> | Побитовый сдвиг вправо |
Побитовое ИЛИ
Побитовый оператор ИЛИ представлен | . Он выполняет побитовую операцию ИЛИ над соответствующими битами двух операндов. Если любой из битов равен 1 , результат 1 . В противном случае результат будет 0 .
Если операнды имеют тип bool , побитовая операция ИЛИ эквивалентна логической операции ИЛИ между ними.
Например,
14 = 00001110 (In Binary) 11 = 00001011 (In Binary)
Побитовый OR операция между 14 и 11:
00001110 00001011 -------- 00001111 = 15 (In Decimal)
Пример 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<час>
Побитовое И
Побитовый оператор AND представлен & . Он выполняет побитовую операцию И над соответствующими битами двух операндов. Если любой из битов равен 0 , результат 0 . В противном случае результат будет 1 .
Если операнды имеют тип bool , побитовая операция И эквивалентна логической операции И между ними.
Например,
14 = 00001110 (In Binary) 11 = 00001011 (In Binary)
Побитовая операция И между 14 и 11:
00001110 00001011 -------- 00001010 = 10 (In Decimal)
Пример 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 (In Binary) 11 = 00001011 (In Binary)
Побитовая операция XOR между 14 и 11:
00001110 00001011 -------- 00000101 = 5 (In Decimal)
Если вы хотите узнать больше об использовании побитового 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 (In Binary)
Операция побитового дополнения на 26:
~ 00011010 = 11100101 = 229 (In Decimal)
Пример 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 на самом деле является представлением -27 в виде дополнения до 2. . Отрицательные числа в компьютере представлены в виде дополнения до 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 (в десятичном виде) и дополнением до 2 229 это -27 . Следовательно, вывод равен -27. вместо 229 .
Побитовый сдвиг влево
Побитовый оператор сдвига влево представлен << . << оператор сдвигает число влево на заданное количество битов. К младшим битам добавляются нули.
В десятичном виде это эквивалентно
num * 2bits
Например,
42 = 101010 (In Binary)
Побитовая операция Lift Shift на 42:
42 << 1 = 84 (In binary 1010100) 42 << 2 = 168 (In binary 10101000) 42 << 4 = 672 (In binary 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<час>
Побитовый сдвиг вправо
Побитовый оператор сдвига влево представлен >> . >> оператор сдвигает число вправо на заданное количество битов. Первый операнд сдвигается вправо на число битов, указанное вторым операндом.
В десятичном виде это эквивалентно
floor(num / 2bits)
Например,
42 = 101010 (In Binary)
Побитовая операция Lift Shift на 42:
42 >> 1 = 21 (In binary 010101) 42 >> 2 = 10 (In binary 001010) 42 >> 4 = 2 (In binary 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
Язык C
- Ключевые слова и идентификаторы C#
- Операторы С#
- Побитовые операторы C# и операторы сдвига битов
- Операторы С++
- Операторы программирования на C
- Операторы Python
- Операторы Java
- Интернет вещей и блокчейн - изменение парадигмы
- Операторы в C++ с примером:что такое, типы и программы
- Побитовые операторы в C:AND, OR, XOR, Shift и дополнение