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

Освоение побитовых и сдвиговых операторов в C#: полное руководство

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

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

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

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

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

Список побитовых операторов C#
ОператорНазвание
~Побитовое дополнение (NOT)
&Побитовое И (AND)
|Побитовое ИЛИ (OR)
^Побитовое исключающее ИЛИ (XOR)
<<Побитовый сдвиг влево
>>Побитовый сдвиг вправо

Побитовое ИЛИ (OR)

Оператор | выполняет побитовую операцию ИЛИ над соответствующими битами двух операндов. Если хотя бы один бит равен 1, результат 1, иначе 0.

Для операндов типа bool побитовое ИЛИ эквивалентно логическому ИЛИ.

Пример:

14 = 00001110 (в двоичном)
11 = 00001011 (в двоичном)

Побитовое ИЛИ между 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

Побитовое И (AND)

Оператор & выполняет побитовую операцию И. Если хотя бы один бит равен 0, результат 0, иначе 1.

Для bool эквивалентно логическому И.

Пример (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.

Пример (14 и 11):

00001110
00001011
--------
00000101 = 5 (в десятичном)

Подробнее о применении XOR см. в статье «Магия XOR».

Пример 3: Побитовое XOR

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

Побитовое дополнение (NOT)

Оператор ~ — унарный, инвертирует каждый бит: 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

Мы ожидали 229, но получили -27. Почему?

Двоичное значение 11100101 (229) в представлении со знаком является дополнительным кодом числа -27. Отрицательные числа в компьютере хранятся в дополнительном коде.

Для любого целого n дополнительный код равен -(n+1).

Дополнительный код
ДесятичноеДвоичноеДополнительный код
000000000-(11111111 + 1) = -00000000 = -0
100000001-(11111110 + 1) = -11111111 = -256
22911100101-(00011010 + 1) = -00011011 = -27

Переполнение игнорируется. Побитовое дополнение 26 дает 229, а его дополнительный код — -27. Поэтому вывод -27.


Побитовый сдвиг влево

Оператор << сдвигает число влево на заданное число бит. Младшие биты заполняются нулями.

В десятичной системе эквивалентно:

num * 2^bits

Пример:

42 = 101010 (в двоичном)

Сдвиг влево:

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

Побитовый сдвиг вправо

Оператор >> сдвигает число вправо на заданное число бит.

В десятичной системе эквивалентно:

floor(num / 2^bits)

Пример (42 = 101010):

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

Язык C

  1. Понимание ключевых слов и идентификаторов C#: правила, списки и лучшие практики
  2. Операторы C# — исчерпывающее руководство по операторам в C#
  3. Освоение побитовых и сдвиговых операторов в C#: полное руководство
  4. Освоение операторов C++: полное руководство с практическими примерами
  5. Операторы в C: исчерпывающее руководство
  6. Мастерство операторов Python: Полное руководство
  7. Освоение операторов Java: типы, синтаксис и практические примеры
  8. IoT и блокчейн: смена парадигмы в доверии к данным и эффективности
  9. Операторы в C++: типы, примеры и практические программы
  10. Побитовые операторы в C: И, ИЛИ, XOR, сдвиги и дополнение — подробно