XOR (исключающий или)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
arechemist
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 173
Зарегистрирован: 24.10.2003 (Пт) 8:45

XOR (исключающий или)

Сообщение arechemist » 23.01.2004 (Пт) 15:27

пожалуйста расскажите про оператор XOR. Для чего он нужен и что он делает?

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 23.01.2004 (Пт) 15:50

Оператор называется "исключающее или".
Если оба бита равны, то выдаёт 0 или False. Если биты различаются, то 1 или True. Часто используется для быстрого кодирования, т.к. обладает замечательным св-ом восстанавливать исходное значение при повторном применении.
Код: Выделить всё
A Xor B = (A Or B) And (Not A Or Not B) = (A Or B) And Not (A And B)


Код: Выделить всё
A             B          A Xor B
--------------------------------
0             0             0
0             1             1
1             0             1
1             1             0


Код: Выделить всё
value=234: key=255: ? value Xor key
21
value=21: key=255: ? value Xor key
234

arechemist
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 173
Зарегистрирован: 24.10.2003 (Пт) 8:45

Сообщение arechemist » 23.01.2004 (Пт) 16:07

Я понял, что ничего не понял :oops: :(
Может у кого-нибудь есть ссылки на статьи про логические операторы?

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 23.01.2004 (Пт) 16:27

А что непонятно-то?
В VB есть всего четыре логических оператора: Not, And, Or, Xor.
Логические операторы оперируют либо переменными типа Boolean (True, False), либо битовым представлением числа (1, 0), побитно.

Not (Не) - всё понятно - отрицалово. Было 0 (False), стало 1 (True) или наоборот.
And (И) - выдаёт 1 (True), если оба аргумента 1 (True) и 0 (False) во всех остальных.
Or (Или) - выдаёт 0 (False), если оба аргумента 0 (False) и 1 (True) во всех остальных.
Xor (Ислючающее Или - eXclude OR) - выдаёт 0 (False), если аргументы одинаковы и 1 (True) если разные.

Если первые три оператора являются базовыми, то Xor можно представить их сочетанием. См.выше.

Примеры:
Код: Выделить всё
A As Byte = 1 '0001
B As Byte = 2 '0010
C As Byte = 3 '0011

Not
Код: Выделить всё
Not A = 1110, Not B = 1101, Not C = 1100


And
Код: Выделить всё
A And B = 0000, A And C = 0001, B And C = 0010


Or
Код: Выделить всё
A Or B = 0011, A And C = 0011, B Or C = 0011


Xor
Код: Выделить всё
A Xor B = 0011, A Xor C = 0010, B Xor C = 0001


Относительно кодирования. Xor восстанавливает значение после двукратного применения с одним и тем же ключем.
Ключ = 0
Код: Выделить всё
кодируем         декодируем
0 Xor 0 = 0,    0 Xor 0 = 0 'значение восстановлено
1 Xor 0 = 1,    1 Xor 0 = 1 'значение восстановлено

Ключ = 1
Код: Выделить всё
кодируем         декодируем
0 Xor 1 = 1,    1 Xor 1 = 0 'значение восстановлено
1 Xor 1 = 0,    0 Xor 0 = 1 'значение восстановлено


Например, символ "a" можно закодировать с ключем 200
Код: Выделить всё
?Chr$(Asc("a") Xor 200)
©

, тогда для раскодирования нудно ещё раз применить ту же операцию к результату кодирования.
Код: Выделить всё
?Chr$(Asc("©") Xor 200)
a

arechemist
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 173
Зарегистрирован: 24.10.2003 (Пт) 8:45

Сообщение arechemist » 23.01.2004 (Пт) 17:28

Ну вот теперь все ясно!!!
Спасибо большо!!! :D

Sanya Z
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 18.08.2003 (Пн) 3:15
Откуда: Москва

Сообщение Sanya Z » 24.01.2004 (Сб) 1:20

И чему только на информатике в школе учат :?: :wink:
И пусть в моих поступках не было логики...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.01.2004 (Сб) 10:09

skiperski писал(а):В VB есть всего четыре логических оператора: Not, And, Or, Xor.

Ты птичку нашу не обижай. У нас ещё есть Imp и Eqv :)
Код: Выделить всё
Левый IMP Верхний

      |  False   True
----------------------
False |  True    True
True  |  False   True


Левый EQV Верхний

      |  False   True
----------------------
False |  True    False
True  |  False   True
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 5

    TopList