C# 4.0 полное руководство - 2011
Шрифт:
}
}
}
Результат выполнения этой программы выглядит следующим образом.
num: 1
num после установки младшего разряда: 1
num: 2
num
после
установки
младшего
разряда:
3
num:
num
: 3
после
установки
младшего
разряда:
3
num:
num
: 4
после
установки
младшего
разряда:
5
num:
num
: 5
после
установки
младшего
разряда:
5
num:
num
: 6
после
установки
младшего
разряда:
7
num:
num
: 7
после
установки
младшего
разряда:
7
num: num
: 8
после
установки
младшего
разряда:
9
num: num
: 9
после
установку
младшего
разряда:
9
num: num
: 10
установки
младшего
разряда:
11
В
Поразрядный оператор исключающее ИЛИ устанавливает двоичный разряд операнда в том и только в том случае, если двоичные разряды сравниваемых операндов оказываются разными, как в приведенном ниже примере.
01111111 10111001
А
1100 0110
У поразрядного оператора исключающее ИЛИ имеется одно интересное свойство, которое оказывается полезным в самых разных ситуациях. Так, если выполнить сначала поразрядную операцию исключающее ИЛИ одного значения X с другим значением Y, а затем такую же операцию над результатом предыдущей операции и значением Y, то вновь получится первоначальное значение X. Это означает, что в приведенном ниже фрагменте кода
R1 = X л Y;
R2 = R1 л Y;
значение переменной R2 оказывается в итоге таким же, как и значение переменной X. Следовательно, в результате двух последовательно выполняемых поразрядных операций исключающее ИЛИ, в которых используется одно и то же значение, получается первоначальное значение. Этим свойством данной операции можно воспользоваться для написания простой программы шифрования, в которой некоторое целое значение служит в качестве ключа для кодирования и декодирования сообщения с помощью операции исключающее ИЛИ над символами этого сообщения. В первый раз операция исключающее ИЛИ выполняется для кодирования открытого текста в зашифрованный, а второй раз — для декодирования зашифрованного текста в открытый. Разумеется, такое шифрование не представляет никакой практической ценности, поскольку оно может быть легко разгадано. Тем не менее оно служит интересным примером для демонстрации результатов применения поразрядных операторов исключающее ИЛИ, как в приведенной ниже программе.
// Продемонстрировать применение поразрядного оператора исключающее ИЛИ. using System;
class Encode {
static void Main { char chi = 'H'; char ch2 = 1i 1 ; char ch3 = 1!1; int key = 88;
Console.WriteLine("Исходное сообщение: " + chi + ch2 + ch3) ;
// Зашифровать сообщение, chi = (char) (chi л key);
ch2 = (char) (ch2 л key) ;
ch3 = (char) (ch3 л key);
Console.WriteLine("Зашифрованное сообщение: " + chi + ch2 + ch3);
// Расшифровать сообщение.
chi = (char) (chi л key); 1
ch2 = (char) (ch2 л key);
ch3 = (char) (ch3 л key);
Console.WriteLine("Расшифрованное сообщение: " + chi + ch2 + ch3);