C# где используются побитовые операции?

В C# присутствуют побитовые операции, но на практике я их использование так и не встречал, поэтому стало интересно где и когда они используются. Не думаю, что разработчики включили в C# просто так.

Всего в C# присутствую следующие побитовые операции:

  • побитовое "и" (AND - &)
  • побитовое "или" (OR - |)
  • исключающее или (XOR - ^)
  • побитовое отрицание (NOT - ~)
  • сдвиг влево <<
  • сдвиг вправо >>

Каждая из этих операций имеет свои таблицы истинности.

побитовые "и" и "или" встречаются при работе с портами, например:

static void Main()
{
    byte port = 0xF0;     // 1 1 1 1   0 0 0 0  -  начальное значение порта ввода/вывода.
    byte mask = 0x02;     // 0 0 0 0   0 0 1 0  -  маска включения устройства управляемого первым битом.
    Console.WriteLine("port = {0:X}", port); // ситуация с лампочкой в комнате

    port = (byte)(port | mask);  // Включить устройство управляемое первым битом.
    Console.WriteLine("port = {0:X}", port);       // 1 1 1 1   0 0 0 0
    mask = 0xFD;          // 1 1 1 1   1 1 0 1  -  Создаем маску выключения устройства управляемого первым битом. 
            
    port = (byte)(port & mask);  // Выключить устройство управляемое первым битом.
    Console.WriteLine("port = {0:X}", port);

   Console.ReadKey();
}

кроме того побитовое "или" также используется в местах где нужно использовать перечисление BindingFlags

исключающее или используется для шифрования:

ushort secretKey = 0x88;
char character = 'A';       // Исходный символ для шифрования.
Console.WriteLine("Исходный символ: {0}, его код в кодовой таблице: {1:X}", character, (byte)character);
character = (char)(character ^ secretKey);
Console.WriteLine("Зашифрованный символ: {0}, его код в кодовой таблице: {1:X}", character, (byte)character);
character = (char)(character ^ secretKey);
Console.WriteLine("Расшифрованный символ: {0}, его код в кодовой таблице: {1:X}", character, (byte)character);

отрицание используется в различных условиях и при использовании теоремы Де Моргана

побитовые сдвиги используются для определения значения определённого бита в числе

Коне что же это далеко не все их места использования