2012-04-23 2 views
5

Чтобы быть честным, я ржавый в бит-операциях.
Меня интересует операция XOR. Ну, я знаю, что он побито, и что он используется в шифровании и что мы можем обмениваться без какой-либо временной переменной, но мне было интересно, есть ли в алгоритмах конкретные подходы, которые соответствуют свойствам XOR.
Я имею в виду, что меня интересуют практические применения XOR в алгоритмах (например, мы могли бы использовать его для поиска уникального элемента среди дубликатов). Есть ли проблема проблем (или формулировка проблемы), что можно увидеть, что использование XOR - это путь? (Так же, как есть шаблон, когда использовать бинарный поиск?)
Есть ли список практических приложений XOR по алгоритмам, связанным с основным алгоритмом, а не просто его использовать, например. делать математические операции быстрее, как мы можем использовать >> вместо деления на 2.Каковы практические применения XOR в алгоритмах

Любой входной радушен

+3

Ну, каждый другой алгоритм хеширования (включая некриптографические) использует XOR в одном месте или в другом месте. Считает ли это, или это все еще «просто битфилд»? – delnan

+0

Я прыгал кое-что по линии наилучшего способа решить проблему. Например, когда вы пытаетесь найти уникальное среди дубликатов, вы можете использовать хеш-таблицу, но можете сделать это без дополнительного пространства с помощью 'XOR', так как дубликаты отменены. – Cratylus

+5

** Один из самых важных вопросов в Интернете и его закрытие .... ** –

ответ

8

Несколько примеров, которые пришли в моем сознании:

переключая биты:

int i = 123; 
i ^= (1 << 4); // toggle bit 5 

Своего рода случайностей:

int i = 123; 
for (int k = 0; k < 100; k++) 
{ 
    i = i^(i << 1) + i; 
    System.out.println(i); 
} 

«Слабый Шифрование ":

int b = 235321; 
int key = 24552; 
int encrypted = b^key; 
int decrypted = encrypted^key; // equals 235321 
+0

Именно поэтому я написал «слабый». –

+3

BTW, последний может быть расширен для простого шифрования простого текста (вам просто нужна кодировка). * Если * ключ случайный и до тех пор, как вход, это на самом деле [довольно хороший шифр] (http://en.wikipedia.org/wiki/One-time_pad), в котором невозможно взломать (не зная ни ключа, ни простой текст). Если ключ короче (и, таким образом, повторяется, чтобы соответствовать длине ввода), он может быть легко взломан (хорошо, легко для специалиста) - единственная оставшаяся проблема - создать одноразовый блокнот и получить его до Боба. Криптография увлекательна. – delnan