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

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

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

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

Если просто, то бит - это двоичное число, которое может иметь значение 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
Похожие вопросы