Mail.ruПочта0Мой Мир0ОдноклассникиВКонтактеИгры0ЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Привести примеры для операций AND, OR, XOR, NOR, LEFT SHIFT С/С#

Assasin97 Профи (644), на голосовании 10 лет назад
Голосование за лучший ответ
Алексей Немиро Профи (968) 10 лет назад
Это побитовые операторы.

Битовые операции выполняются над битами (из которых состоят байты).

Если просто, то бит - это двоичное число, которое может иметь значение 0 или 1, которое в десятичной системе соответствует расположению бита в байте. В одном байте восемь бит. Первый бит в байте определяет значение один, второй - два, третий - четыре, четвертый - восемь, пятый - шестнадцать, шестой - тридцать два, седьмой - шестьдесят четыре и восьмой - сто двадцать восемь. Т. е. если третий бит в байте имеет значение 1 (светится/есть ток), а остальные ноль (выключены/нет тока), то в десятичной системе это будет значение четыре (т. е. байт будет иметь значение 4). Если третий и пятый биты имеют значение 1, то: 4 + 16 = 20 (байт будет иметь значение 20). Таким образом, комбинирую единицы и нули в байте можно получить любое значение от нуля до 255.

Битовые операции позволяют работать с единицами у нулями. Часто можно встретить использование битовых операций в перечислениях. Например:

var r = new Regex(@"\w", RegexOptions.Compiled | RegexOptions.IgnoreCase);

В данном случае используется оператор | (ИЛИ). Внутри класса Regex для проверки наличия определенных опций используется оператор & (И).

Более простые примеры:

Console.WriteLine(2 | 4); // 2 + 4 - будет шесть

Если посмотреть на единицы и нули, то число два:
0100 0000
число четыре:
0010 0000

оператор ИЛИ смешивает единицы и нули.
Если значения обоих бит равны, то остается это значение.
Если в одном из бит значение один, а в другом ноль, то используется значение один.
Таким образом, смешивая числа 2 и четыре получается:
0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 (+ для ровности текста, чтобы было понятно, как делается расчет)
т. е. в десятичной системе будет:
0 + 2 + 4 + 0 + 0 + 0 + 0 + 0 = 6

Оператор AND работает наоборот. Если значения обоих битов равны, то будет это значение. Если один из битов равен нулю, а второй единице, то будет ноль.

Console.WriteLine(6 & 2); // будет 2, т. к. из шести можно получить число 2, т. к. 2 + 4

В двоичном виде число шесть:
0110 0000
а число два:
0100 0000

Результатом использования оператора И будет:
0 + 1 + 0 + 0 + 0 + 0 + 0 + 0
в десятичное системе
0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 = 2

что позволяет в десятичной системе исчисления проверить наличие двойки в шестерке :)

Console.WriteLine(6 & 8); // будет 0, т. к. в шестерке нет восьмерки

Console.WriteLine(2 | 4 | 8); // 2 + 4 + 8 = 14
Console.WriteLine(14 & 8); // будет 8, т. к. в числе 14 есть восьмерка
Console.WriteLine(14 & 1); // будет 0, т. к. в числе 14 нет числа 1

Console.WriteLine(1 | 2 | 4 | 8); // 1 + 2 + 4 + 8 = 15
Console.WriteLine(15 & 1); // будет 1, т. к. в числе 15 есть единица

Операторы ИЛИ и И используются довольно часто.

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

Console.WriteLine(6 ^ 2); // будет 4

В двоичной системе число шесть:
0110 0000
а число два:
0100 0000

Результатом использования оператора XOR будет:
0 + 0 + 1 + 0 + 0 + 0 + 0 + 0
0 + 0 + 4 + 0 + 0 + 0 + 0 + 0 = 4

XOR можно использовать для шифрования данных.

Сдвиг влево/вправо (логический) - просто смещает в байте единицы и нули влево или вправо.
Например:

Console.WriteLine(6 << 3); // будет 24

Число шесть:
0110 0000
число два:
0100 0000

Сдвиг шестерки влево на два (шага):
шаг 1:
0011 0000
шаг 2:
0001 1000
Да, левая сторона у нас справа :) Это зависит от того, с какой стороны смотреть на байт.

0 + 0 + 0 + 1 + 01 + 0 + 0 + 0
0 + 0 + 0 + 8 + 16 + 0 + 0 + 0 = 24

Console.WriteLine(6 << 3); // будет 48
шаг 1:
0011 0000
шаг 2:
0001 1000
шаг 3:
0000 1100

Как-то так :)
Источник: http://aleksey.nemiro.ru
Похожие вопросы