Побитовые операторы 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 и дополнение