Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Побитовые операторы C# и операторы сдвига битов

Побитовые операторы C# и операторы сдвига битов

В этом руководстве мы подробно узнаем об операторах побитового сдвига и побитового сдвига в C#. C# предоставляет 4 побитовых и 2 побитовых оператора сдвига.

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

Если вам интересно узнать больше, посетите страницу практического применения побитовых операций.

Ниже перечислены побитовые операторы и операторы сдвига битов, доступные в C#.

Список побитовых операторов 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
Десятичный Двоичный Дополнение 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

  1. Ключевые слова и идентификаторы C#
  2. Операторы С#
  3. Побитовые операторы C# и операторы сдвига битов
  4. Операторы С++
  5. Операторы программирования на C
  6. Операторы Python
  7. Операторы Java
  8. Интернет вещей и блокчейн - изменение парадигмы
  9. Операторы в C++ с примером:что такое, типы и программы
  10. Побитовые операторы в C:AND, OR, XOR, Shift и дополнение