младшего
разряда:
9
num: num
: 10 после
установки
младшего
разряда:
11
В приведенной выше программе выполняется поразрядная операция ИЛИ над каждым числовым значением переменной num и 1, поскольку 1 дает двоичное значение, в котором установлен младший разряд. В результате поразрядной операции ИЛИ над 1 и любым другим значением младший разряд последнего устанавливается, тогда как все остальные разряды остаются без изменения. Таким образом, результирующее числовое значение получается нечетным, если исходное значение было четным.
Поразрядный оператор исключающее ИЛИ устанавливает двоичный разряд операнда в том и только в том случае, если двоичные разряды сравниваемых операндов оказываются разными, как в приведенном ниже примере.
01111111 10111001
А
11000110
У поразрядного оператора исключающее ИЛИ имеется одно интересное свойство, которое оказывается полезным в самых разных ситуациях. Так, если выполнить сначала поразрядную операцию исключающее ИЛИ одного значения 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);