Java руководство для начинающих - Шилдт Герберт (2012)
-
Год:2012
-
Название:Java руководство для начинающих
-
Автор:
-
Жанр:
-
Оригинал:Английский
-
Язык:Русский
-
Издательство:Вильямс
-
Страниц:316
-
ISBN:978-5-8459-1770-6
-
Рейтинг:
-
Ваша оценка:
Java руководство для начинающих - Шилдт Герберт читать онлайн бесплатно полную версию книги
ch = (char) ('A1 + i);
System.out.print(ch);'
// В следующем операторе устанавливается шестой бит,
// в итоге переменная ch содержит код символа строчной буквы,
ch = (char) ((int) ch | 32);
System.out.print(ch + " ") ;
}
}
}
Выполнение этой программы дает следующий результат:
Аа Bb Сс Dd Ее Ff Gg Hh Ii Jj
В приведенном выше примере программы операция поразрядного ИЛИ выполняется над кодом символа и значением 32, имеющим двоичное представление 0000000000100000. Как видите, в двоичном представлении значения 32 установлен только шестой бит. Используя это значение в качестве одного операнда в операции поразрядного ИЛИ с любым другим значением в качестве другого операнда, получим результат, в котором устанавливается шестой бит, а состояние всех остальных битов остается без изменения. Таким образом, любая прописная буква будет преобразована в строчную.
Операция поразрядного исключающего ИЛИ дает результат, в котором отдельный бит устанавливается в том и только в том случае, если соответствующие биты в двух операндах имеют разные значения. Ниже приведен пример выполнения операции поразрядного исключающего ИЛИ.
0111 1111
1011 1001
^
1100 0110
Операция поразрядного исключающего ИЛИ имеет одну интересную особенность, которая позволяет очень просто кодировать сообщения. Если выполнить данную oneрацию сначала над некоторыми значениями X и Y, а затем над ее результатом и значением Y, то снова получится значение X. Например, при выполнении приведенной ниже последовательности операторов переменная R2 получит то же значение, что и X. Таким образом, в результате выполнения подряд двух операций поразрядного исключающего ИЛИ восстанавливается исходное значение.
R1 = X А Y; R2 = R1 А Y;
Эту особенность операции поразрядного исключающего ИЛИ можно использовать для создания простейшей шифрующей программы, в которой некоторое целое число будет выполнять роль ключа, применяемого как при шифровании, так и дешифровании сообщений. Над всеми символами сообщения и данным числом будет выполняться операция поразрядного исключающего ИЛИ. В первый раз данная операция будет выполняться при шифровании, формируя кодированный текст, а второй раз — при дешифровании, в результате чего восстанавливается исходный текст сообщения. Ниже приведен пример простой программы, выполняющей шифрование и дешифрование коротких сообщений.
// Использование операции поразрядного исключающего ИЛИ
// для шифрования и дешифрования сообщений,
class Encode {
public static void main(String args[]) {
String msg = "This is a test";
String encmsg = "";
String decmsg = "";
int key = 88;
System.out.print("Original message: ");
System.out.println(msg);
// зашифровать сообщение
for (int i=0; i < msg.length(); i++)
// Построение зашифрованной строки сообщения,
encmsg = encmsg + (char) (msg.charAt(i) A key);
System.out.print("Encoded message: ");
System.out.println(encmsg) ;
// дешифровать сообщение
for(int i=0; i < msg.length(); i++)
// Построение дешифрованной строки сообщения.
decmsg = decmsg + (char) (encmsg.charAt(i) A key);
System.out.print("Decoded message: ");
System.out.println(decmsg);
}
}
Выполнение этой программы дает следующий результат:
Original message: This is a test
Encoded message: 01+xl+x9x,=+,
Decoded message: This is a test
Как видите, в результате двух операций поразрядного исключающего ИЛИ с одним и тем же ключом получается дешифрованное сообщение, совпадающее с исходным.