C# 4.0: полное руководство | страница 71
Поразрядный оператор ИЛИ может быть использован для установки отдельных двоичных разрядов. Если в 1 установлен какой-нибудь бит в любом из операндов этого оператора, то в 1 будет установлен и соответствующий бит в другом операнде. Например:
> 1101 0011
> 1010 1010
>|_________
> 1111 1011
Используя поразрядный оператор ИЛИ, можно без особого труда превратить упоминавшийся выше пример программы, преобразующей нечетные числа в четные, в приведенный ниже обратный пример, где четные числа преобразуются в нечетные.
>// Применить поразрядный оператор ИЛИ, чтобы сделать число нечетным.
>using System;
>class MakeOdd {
> static void Main() {
> ushort num;
> ushort i;
> for(i = 1; i <= 10; i++) {
> num = i;
> Console.WriteLine("num: " + num);
> num = (ushort) (num | 1);
> Console.WriteLine("num после установки младшего разряда: "
> + num + "\n");
> }
> }
>}
Результат выполнения этой программы выглядит следующим образом.
>num: 1
>num после установки младшего разряда: 1
>num: 2
>num после установки младшего разряда: 3
>num: 3
>num после установки младшего разряда: 3
>num: 4
>num после установки младшего разряда: 5
>num: 5
>num после установки младшего разряда: 5
>num: 6
>num после установки младшего разряда: 7
>num: 7
>num после установки младшего разряда: 7
>num: 8
>num после установки младшего разряда: 9
>num: 9
>num после установки младшего разряда: 9
>num: 10
>num после установки младшего разряда: 11
В приведенной выше программе выполняется поразрядная операция ИЛИ над каждым числовым значением переменной num и 1, поскольку 1 дает двоичное значение, в котором установлен младший разряд. В результате поразрядной операции ИЛИ над 1 и любым другим значением младший разряд последнего устанавливается, тогда как все остальные разряды остаются без изменения. Таким образом, результирующее числовое значение получается нечетным, если исходное значение было четным.
Поразрядный оператор исключающее ИЛИ устанавливает двоичный разряд операнда в том и только в том случае, если двоичные разряды сравниваемых операндов оказываются разными, как в приведенном ниже примере.
> 0111 1111
> 1011 1001
>^_________
> 1100 0110
У поразрядного оператора исключающее ИЛИ имеется одно интересное свойство, которое оказывается полезным в самых разных ситуациях. Так, если выполнить сначала поразрядную операцию исключающее ИЛИ одного значения X с другим значением Y, а затем такую же операцию над результатом предыдущей операции и значением Y, то вновь получится первоначальное значение X. Это означает, что в приведенном ниже фрагменте кода