Д'якон
07 Sep 2007, 21:13
Тогда обратимся к товарищу Berserkerу. Может он добавит этот навык отдельной опцией в Феникса. Я тогда за выходные доведу до ума скрипт. А, Berserker?
Berserker
07 Sep 2007, 21:30
К сожалению, врядли:
1) Я почти не использую опций
2) Я уже решил строго выполнить за выходные намеченный план.
3) Используй макросы и можешь любой скрипт под Мод писать, это не сложно.
Делается это так, в битве ты перехватываешь используемы заклы через !?BG0, далее проверяешь, а обладает ли человек (если человек!!! ИИ трогать - себе во вред) обладает нужными навыками, то ОК, иначе запрещаем каст и выводим месагу.
P.S Я общеал за выходные написать прогу для переменных и констант (примитивную пока), так что $уже смело можно юзать$.
Д'якон
07 Sep 2007, 21:33
Скрипт уже написан - повторю.
Цитата(Д'якон @ 07 Sep 2007, 10:56)
Вот 1-й скрипт.
Для изучения магии необходимо иметь не только мудрость, но и некоторые другие навыки определенного ур-ня.
Например, для изучения ускорения - необходимо иметь мудрость, логистику и магию воздуха.
!#FU1234:Px1/x2/x3/x4/x5;
// x1 - номер хаклинания
// х2 - 1-й навык, который необходим для изучения магии (кроме мудрости). В основном это должна быть одна из базовых магий;
// х3 - ур-нь навыка;
// x4 - 2-й навык;
// х5 - ур-нь 2-го навыка.
!?FU1234
!!SSx1:F?y1;
!!OW:A-1/?y2;
!!HEy2:Mx1/?y3;
!!HEy2:Sx2/?y4;
!!HEy2:Sx4/?y5;
!!if&y3=1/y4=>x3/y5=>x5:;
!!SSx1:Fy1;
!!el:;
!!SSx1:F0;
!!en;
Berserker
07 Sep 2007, 21:42
Это не полноценный скрипт. Он ничего не делает - это раз. Во-вторых, заклы убирать не дело!!! Их может давать свиток или арт!
Д'якон
08 Sep 2007, 10:23
Уговорил. Вот
ZVSE
_WARNING_#1=IMPORTANT! This file is not in a plain text format. NEVER use any editor except ERM_S for making any kind of changes!
ERMS_PoweredBy=ERM Scripter v. 2004.10.5.945
ERMS_ScriptDate=8.9(September).2007
!?BGO;
!!BG:A?v4;
!!BG:S?v2;
!!FU1234:Pх1/х2/х3/х4/х5;
// x1 - номер хаклинания
// х2 - 1-й навык, который необходим для изучения магии (кроме мудрости). В основном это должна быть одна из базовых магий;
// х3 - ур-нь навыка;
// x4 - 2-й навык;
// х5 - ур-нь 2-го навыка.
!!BG&v3=1:A0;
!?FU1234
!!VRv3:S0;
!!if&x1=v2/v4=1:;
!!BG:H?y1;
!!HEy1:Sx2/?y4;
!!HEy1:Sx4/?y5;
!!if&y4<x3:;
!!VRv3:S1;
!!en;
!!if&y5<x5:;
!!VRv3:S1;
!!en;
!!en;
Фигово только что в книге отображються не используемые заклинания
Д'якон
08 Sep 2007, 17:33
А что отвечает за появление заклинаний в книге? Это свойство книги, или мудрости, или это отдельная функция в принципе.
Demiurg
08 Sep 2007, 18:20
Цитата(Д'якон @ 08 Sep 2007, 18:33)
А что отвечает за появление заклинаний в книге? Это свойство книги, или мудрости, или это отдельная функция в принципе.
Наличие данного заклинания у героя и все.
Д'якон
08 Sep 2007, 19:02
В смысле?. Если допустим герой не эксперт мудрости, то при посещении гильдии магов у него в не появится закл в книге.
Berserker
08 Sep 2007, 19:08
Дьякон, ну что значит вот это:
!!FU1234:Pх1/х2/х3/х4/х5; ???
Функцию надо вызывать с конкретными параметрами и вообще, логики не прослеживается. Кроме того, функцию вовсе необязательно занимать, всё можно прямо в !!BG0: сделать.
Далее, непонятное условие к неглобальной переменной v3 и прочее. Ты сперва тестируй на всех случаях свои скрипты

Далее, !!BG:H?y1; - некорректно , точнее только Драколич употреьляет так, хотя при опускании параметра стороны считается 0 по умолчанию (левый герой), но ведь не редко человек и справа, а ИИ слева!!!
И прочее.
Demiurg
08 Sep 2007, 19:16
Цитата(Д'якон @ 08 Sep 2007, 20:02)
В смысле?. Если допустим герой не эксперт мудрости, то при посещении гильдии магов у него в не появится закл в книге.
Не так. При посещении гильдии без Мудрости герой не получит это заклинание. А в книге оно не появится потому, что его не будет у героя.
Д'якон
09 Sep 2007, 00:44
Ну Berserker, ты меня удивляешь, по крайней мере первым вопросом:
Дьякон, ну что значит вот это:
!!FU1234:Pх1/х2/х3/х4/х5; ???
Распишу еще раз.
// x1 - номер хаклинания (например, слепота -
62)
// х2 - 1-й навык, который необходим для изучения магии (кроме мудрости). В основном это должна быть одна из базовых магий;(например,магия воздуха-
15)
// х3 - ур-нь навыка;(базовая магия воздуха -
1)
// x4 - 2-й навык;(орлиный глаз -
11)// х5 - ур-нь 2-го навыка. (базовый орлиный глаз -
1)
Так запускаешь эту функцию для каждого закла, только возможно так будет немногог быстрее:
!!FU1234&v2=x1:Pх1/х2/х3/х4/х5; где в v2 хранится номер используемого в данный момент закла.
Это шаблон, куда подставляются конкретные данные заклинания.
Понятно?
Далее v3, может я и некорректно сделал, но v3 приравнивается 1, если отсутствует какой-нибудь из необходимых навыков, в результате чего прекращается действие.
Скрипт этот тестировал, не на всех случаях, но тестировал.
!!BG:H?y1 - я так понял, что здесь заносится номер героя, существа которого ходят в данный момент. Будь то ИИ или человек. Т.е. скрипт действует для всех (хоть ИИ этого и не "понимает").
Еще вопросы?
Добавлено ([mergetime]1189287865[/mergetime]):
Цитата(Demiurg @ 08 Sep 2007, 19:16)
Цитата(Д'якон @ 08 Sep 2007, 20:02)
В смысле?. Если допустим герой не эксперт мудрости, то при посещении гильдии магов у него в не появится закл в книге.
Не так. При посещении гильдии без Мудрости герой не получит это заклинание. А в книге оно не появится потому, что его не будет у героя.
Ну и конечно запретить герою получить заклинание нельзя, да? Я знаю что флаг 0 для заклинания не отображает его в книге, будь оно выучено, от арта или от свитка. Вот только убирается оно из книг у всех. И с восстонавлением потом проблемы.
Итог: нельзя ли это свойство как-то юзать?
Berserker
09 Sep 2007, 19:17
Повторюсь - это не рабочий скрипт и как ты его тестировал?
2) для ИИ непонимание выльется в зависание, если он захочет кодовать закл. (вроде Хорн писал, что нельзя забирать или давать заклы уже во время битвы).
Demiurg
09 Sep 2007, 19:28
Цитата(Berserker @ 09 Sep 2007, 20:17)
2) для ИИ непонимание выльется в зависание, если он захочет кодовать закл. (вроде Хорн писал, что нельзя забирать или давать заклы уже во время битвы).
Horn ошибся. Его, как разработчика TE, интересует мультиплеерный вариант. И, не зная про !!HE-10 и !!HE-20, он думал, что он не сможет давать и отнимать заклинания в сетевой битве.
Д'якон
09 Sep 2007, 19:35
Это не серьезно, ведь ты даже не тестировал. Протестируй, пожалуйста и найди баги, если сможешь.
Я тестил так: для ледяной стрелы поставил необходимые навыки базовая удача и базовая балистика. (т.е. вместо
х1 - 16;
х2-9;
х3-1;
х4-10;
х5 -1;
Поставил на карте двух героев (своего и ИИ). Обоим дал книгу и армию, но компу не дал необходимых навыков для использования стрелы. Далее я нападал на компа и давал ему таекое право. Не зависло ни разу.
Попробуй сначала.
Berserker
09 Sep 2007, 22:52
Дьякон, но ведь это шаблон, а не готовый скрипт. Юзер не должен подстовлять чего-то, согласись. Сделай полный вариант для всех заклов и без использования глобальных переменных.
З.Ы И без использования функций. Тогда твой скрипт будет совместим с любыми версиями мода и других скриптов.
Demiurg
09 Sep 2007, 23:02
Цитата(Berserker @ 09 Sep 2007, 23:52)
И без использования функций. Тогда твой скрипт будет совместим с любыми версиями мода и других скриптов.
Бывает еще логическая несовместимость.
Berserker
10 Sep 2007, 19:18
Да, но тут её почти не может быть, по крайней мере с уже существующими скриптами.
Д'якон
13 Sep 2007, 21:42
ОК. Постараюсь. Но не знаю получится ли без глобальных.
Berserker
13 Sep 2007, 22:04
Я уже почти закончил SCVS, а как обойтись я тебе помогу.
Д'якон
15 Sep 2007, 12:12
Ну без глобальных переменных обошелся, а вот без функции....
Моих знаний ЕРМ и фантазии не хватило
!?BGO;
!!FU1234:Px1/x2/x3/x4/x5;
!?FU1234
!!BG:A?y6;
!!BG:S?y7;
!!VRv3:S0;
!!if&x1=y7/y6=1:;
!!BG:H?y1;
!!HEy1:Sx2/?y4;
!!HEy1:Sx4/?y5;
!!if&y4<x3:;
!!IF:V1/0;
!!en;
!!if&y5<x5:;
!!IF:V1/1;
!!en;
!!en;
!!BG&1/y6=1:A0;
Думал вместо функции обращаться к какой нибудь текстовой таблице или .ini файлу, но не знаю как и получится ли.
Добавлено ([mergetime]1189847539[/mergetime]):
Можно добавить еще месагу, после отмены действия, и изменить описание заклов.
Demiurg
15 Sep 2007, 12:14
Моя все же считает, что лучше перед боем убирать заклинание из книги, чем отменять действие.
Д'якон
15 Sep 2007, 12:30
ОК, попробую убрать закл из книги. Вопрос только, после боя заклы возвращать или нет (если они допустим были выучены в гильдии)?
Ну и если на то пошло, то лучше не давать заклинание вообще герою без нужных навыков.
Demiurg
15 Sep 2007, 12:41
Цитата(Д'якон @ 15 Sep 2007, 13:30)
Ну и если на то пошло, то лучше не давать заклинание вообще герою без нужных навыков.
Если сможешь все проконтролировать, то да.
Д'якон
15 Sep 2007, 13:16
Ну вот скрипт для убирания заклов из книги перед боем:
!?BA0;
!!FU1234:Px1/x2/x3/x4/x5;
!!IF:V2/1;
!!FU1234:Px1/x2/x3/x4/x5;
!?FU1234
!!IF:V1/0;
!!BA&-2:H0/?y1;
!!BA&2:H1/?y1;
!!HEy1:Sx2/?y4 Sx4/?y5;
!!if&y4<x3:;
!!IF:V1/1;
!!en;
!!if&y5<x5:;
!!IF:V1/1;
!!en;
!!HEy1&1:Mx1/0;
!!IF:V2/0;
gamecreator
15 Sep 2007, 14:19
имхо, надо возвращать. имхо, идея в том, что герой выучил закл, а юзать без навыков не может
Д'якон
15 Sep 2007, 15:24
Пришлось попариться но вот:
Код
!?BA0;
!!FU1234:Px1/x2/x3/x4/x5;
!!IF:V2/1;
!!FU1234:Px1/x2/x3/x4/x5;
!?FU1234
!!IF:V1/0;
!!BA&-2:H0/?y1;
!!BA&2:H1/?y1;
!!VRy6:Sx1;
!!IF:Wy1;
!!HEy1:Mx1/?wx1;
!!HEy1:Sx2/?y4 Sx4/?y5;
!!if&y4<x3:;
!!IF:V1/1;
!!en;
!!if&y5<x5:;
!!IF:V1/1;
!!en;
!!HEy1&1:Mx1/0;
!!IF:V2/0;
!?BA1;
!!DO1235/0/69/1:P;
!?FU1235;
!!BA:H0/?y1;
!!BA:H1/?y2;
!!IF:Wy1;
!!HEy1&wx16=1:Mx16/1;
!!IF:Wy2;
!!HEy2&wx16=1:Mx16/1;
Demiurg
15 Sep 2007, 16:27
Если честно, то это бред.
Например, переменной w0 не существует.
Во-вторых использовать на 1 скрипт 69 w-переменных???
Д'якон
15 Sep 2007, 16:40
Согласен, но w0 в принципе и не нужно использовать, боевые заклинания начинаются с 10-го. И не 69 тогда а 59, для каждого героя.
Много, согласен. А как по-другому вернуть закл?
Д'якон
15 Sep 2007, 17:44
Вот третий вариант, по смыслу наверно лучший а вот по времени обработки судить Вам
Код
!?TL0;
!!DO1234/0/155/1:Px1/x2/x3/x4/x5;
!?FU1234
!!IF:V1/0;
!!HEx16:O?y1;
!!FU&y1=-1:E;
!!HEx16&y1>-1:Sx2/?y2 Sx4/?y3;
!!if&y2<x3:;
!!IF:V1/1;
!!en;
!!if&y3<x5:;
!!IF:V1/1;
!!en;
!!HEx16&1:Mx1/0;
Попрошу только без "Если честно, то это бред", а то такие фразы отбивают желание чем либо заниматься. Эта фраза была бы к месту, если бы я кому-нибудь чего-нибудь навязывал.
Demiurg
15 Sep 2007, 19:29
Цитата(Д'якон @ 15 Sep 2007, 17:40)
Много, согласен. А как по-другому вернуть закл?
Учим матчасть)
Одна переменная - 32 бита. Это означает, что в ней мы можем хранить информацию о наличии у героя 32 заклинаний.
Д'якон
15 Sep 2007, 20:46
Во-первых, я матчасть не учил (не специализируюсь в этой области).
Во-вторых, все равно не знаю как эти 32бита реализовать на практике.
Berserker
15 Sep 2007, 21:02
31 бит, ибо у ЕРМ баг с изменением 32-го бита, приходится вручную умножать на -1, в общем рутина.
1) напиши функцию для возведения 2-ки в указанную степень
2) бит устанавливается так:
!!VRy1:|1; установили первый бит
!!VRy1:|2; установили второй бит
!!VRy1:|4; установили третий бит
!!VRy1:&4; Проверка на 3-й бит
!!VRy1:&-3; сняли третий бит
вроде так
Demiurg
15 Sep 2007, 21:13
Цитата(Berserker @ 15 Sep 2007, 22:02)
!!VRy1:&-3; сняли третий бит
Только не 3ий, а 2ой.
устанавливать |(2^x)
удалять &(2^xX-1)
X-1 - инвертирует все биты. Нетрудно проверить, что для степенй 2ки это равнозначно добавить 1 и следом умножить на -1.
gamecreator
16 Sep 2007, 07:59
а как действует удаление способом с отр. числом?
Demiurg
16 Sep 2007, 09:38
Цитата(gamecreator @ 16 Sep 2007, 08:59)
а как действует удаление способом с отр. числом?
Известно как)
Чтобы удалить 3ий бит, необходимо сделать "логическое И" с числом у которого на 3ей позиции стоит 0, а на всех остальных единица. "И" с единицей не меняет бит. "И" с нулем обнуляет бит.
Чтобы посмотреть, что из себя представляют отрицательные числа достаточно стандартного виндошного калькулятора. В нем в расширенном режиме есть переход в 2ичную систему счисления.
Д'якон
16 Sep 2007, 10:11
!!VRy1:&4; Проверка на 3-й бит
И как узнать что бит установлен, куда заносится ответ?
Demiurg
16 Sep 2007, 10:21
Открой хелп по ERM, ресивер !!VR, практически в самом низу.
LOGICAL BIT OPERATIONS
&# Check or remove specific bit of a variable
& does a logical AND on the bits of a variable and can be used to check if a specific bit has been set. For example, to test if the variable v1 has the 5th bit (16) set, use: !!VRv1:&16; v1 will be set to 16 if bit 5 is set and 0 if it isn't. This can be very useful when checking monster flags.
Example:
!!BRx16:F?i; read flags
!!VRi:&33554432; just look at waiting bit
!!IF&i>0:M^This stack is waiting.^;
You can also clear (remove) a specific bit without touching the other bits in a variable. To do so, use the negative minus one of the bit value you wish to remove. For example, to remove the 5th bit (16), use -17, e.g., !!VRv1:&-17;
To check or unset several bits at once sum their values. E.g. to remove 4th(8), 3rd(4) and 1st(1) bits use &-14 ( =-1*(8+3+1)-1 ).
To check them use &13.
|# Set a specific bit of a variable
| does a logical OR on the bits of a variable and can be used to set a specific bit without changing the other bits. For example, to set the 6th bit (32) for v1, use: !!VRv1:|32;
If v1 already had this bit set, nothing is changed. If it didn't, it now has this bit set. This can be very useful for adding new flags to a monster if you don't know which ones it already has, and in fact, this is really the only completely safe way to do so.
To set several bits at once sum their values. E.g. to set 5th(16) and 3rd(4) bits use |20
X$ Does a logical XOR on a bits of a variable
E.g. X-1 will invert bits of a variable.
To check for difference between two variables use syntax :VR@:X$ , where @ is variable which is one of variables to compare and also will keep the result of comparison. $ is second comparing variable.
Example:
Say v1=163 (10100011) and v2=106 (01101010). Then after
!!VRv1:Xv2; v2 is still 106.
1 0 1 0 0 0 1 1
0 1 1 0 1 0 1 0
XOR - - - - - - - -
1 1 0 0 1 0 0 1
So v1=201 (11001001)
gamecreator
16 Sep 2007, 13:07
а я и не знал что можно XOR сделать в ЕРМ
Д'якон
18 Sep 2007, 20:02
Не могу понять почему в у10 не заносится значение х3 из функции 1236
Код
!?BA0;
!!FU1234:P16/9/1/10/1;
!!IF:V2/1;
!!FU1234:P16/9/1/10/1;
!?FU1234
!!IF:V1/0;
!!BA&-2:H0/?y1;
!!BA&2:H1/?y1;
!!VRy6:Sx1;
!!HEy1:Sx2/?y4 Sx4/?y5 Mx1/?y7;
!!if&y4<x3:;
!!IF:V1/1;
!!en;
!!if&y5<x5:;
!!IF:V1/1;
!!en;
!!HEy1&1:Mx1/0;
!!IF:V2/0;
!!if&y7=1/x1>9/x1<42:;
!!VRy8:S1;
!!DO1236/10/41/1:Py8/x1/?y10;
!!IF:Wy1;
!!VRw1:|y10;
!!VRw1:|&y10;
!!en;
!!if&y7=1/x1>42/x1<60;
!!VRy8:S1;
!!DO1236/10/41/1:Py8/x1/?y10;
!!VRw2:|y10;
!!en;
!?FU1236;
!!if&x2>x16/x2<41:;
!!VRx1:+x1;
!!VRx3:Sx1;
И все же мне кажется, что скрипт через !?TL, самый оптимальный. А?
Berserker
18 Sep 2007, 20:19
1) y-переменные не прокатят, юзай v2
2) правильно: !!VRvx2:...
Д'якон
18 Sep 2007, 20:24
2 Berserker
Тут вопрос на счет скрипта с !?TL; Что ты думаешь о времени его выполнения
Berserker
18 Sep 2007, 20:31
в каком смысле?стоит ли его нагружать? если имелось ввиду это, то лучше его не юзать.
Д'якон
18 Sep 2007, 20:56
Имелось ввиду:
Код
!?TL0;
!!DO1234/0/155/1:Px1/x2/x3/x4/x5;
!?FU1234
!!IF:V1/0;
!!HEx16:O?y1;
!!FU&y1=-1:E;
!!HEx16&y1>-1:Sx2/?y2 Sx4/?y3;
!!if&y2<x3:;
!!IF:V1/1;
!!en;
!!if&y3<x5:;
!!IF:V1/1;
!!en;
!!HEx16&1:Mx1/0;
Не будет ли этот скрипт слишком долгим по времени исполнения на больших картах?
gamecreator
18 Sep 2007, 21:07
немного оптимизировал код
Код
!?FU1234
!!IF:V1/0;
!!BA&-2:H0/?y1;
!!BA&2:H1/?y1;
!!VRy6:Sx1;
!!HEy1:Sx2/?y4 Sx4/?y5 Mx1/?y7;
!!if|y4<x3|y5<x5:;
!!IF:V1/1;
!!en;
!!HEy1&1:Mx1/0;
!!IF:V2/0;
!!VRy8:S1;
!!DO1236/10/41/1:Py8/x1/?y10;
!!if&y7=1/x1>9/x1<42:;
!!IF:Wy1; \\почему тут определяется герой...
!!VRw1:|y10;
!!en;
!!if&y7=1/x1>42/x1<60;
!!VRw2:|y10; \\...а тут нет?
!!en;
!?FU1236;
!!if&x2>x16/x2<41:;
!!VRx1:+x1;
!!VRx3:Sx1;
!!en;
Добавлено ([mergetime]1190138835[/mergetime]):
просьба ответить на вопрос в коментах кода
Д'якон
18 Sep 2007, 21:12
Потому что
!!IF:Wy1; - нужно поставить перед !!if
Berserker
18 Sep 2007, 21:19
1) Нет почти таких задач, которые требовали загрузки ежесекундного таймера.
2) Будет.
Д'якон
22 Sep 2007, 16:13
Помогите. Объясните в чем дело? Вопрос написан в коде.
Код
!?BA0;
!!FU1234:P16/9/1/10/1;
!!IF:V2/1;
!!FU1234:P16/9/1/10/1;
!?FU1234
!!IF:V1/0;
!!BA&-2:H0/?y1;
!!BA&2:H1/?y1;
!!HEy1:Sx2/?y4 Sx4/?y5 Mx1/?y7;
!!if&y4<x3|y5<x5:;
!!IF:V1/1;
!!en;
!!HEy1&1:Mx1/0;
!!IF:Wy1;
!!if&y7=1/x1>9/x1<41:;
!!VRy8:S1;
!!VRx1:-10;
!!DO1236/10/40/1:Py8/x1;
!!VRw1:|v1;
!!VRw1:&v1; - 1случай
!!IF:M^%W1^; - проверяем какой бит записан для магии №16 - 64
!!en;
!!if&y7=1/x1>41/x1<60;
!!VRy8:S1;
!!VRx1:-41;
!!DO1236/41/69/1:Py8/x1;
!!VRw2:|v1;
!!en;
!!IF:V2/0;
!?FU1236;
!!if&x2>0:;
!!VRx1:+x1;
!!VRx2:-1;
!!en;
!!VRv1:Sx1;
!?BA1;
!!DO1235/10/69/1:P;
!?FU1235;
!!BA:H0/?y1;
!!BA:H1/?y2;
!!if&x16>9/x16<41:;
!!VRy8:S1;
!!VRy9:Sx16;
!!VRy9:-10;
!!DO1236/10/40/1:Py8/y9;
!!IF:M^%V1^; - проверяем как изменяется v1 - нормально. но когда доходит до 64 то......
!!IF:Wy1;
!!VRw1:&v1; - 2-ой случай
!!IF:M^%W1^;....... выдает 0, почему?????
!!HEw1&w1=v1:Mx16/1;
!!VRw1&w1=v1:Xw1;
!!en;
gamecreator
22 Sep 2007, 16:31
потому что у w1 и v1 нет общих битов. как например у 2 и 5.
Д'якон
22 Sep 2007, 16:57
Не понял.
Хорошо, спрошу по-другому. Почему в первом случае (см. предыдущий пост) работает, а во втором нет, хотя v1 и там и там имеет одно и то же значение.
gamecreator
22 Sep 2007, 18:23
потому что ты присвоил w1 биты v1 и w1, т.е. v1 входит в w1.
таблица в помощь:
Код
OR AND XOR
0 OR 0 = 0 0 AND 0 = 0 0 XOR 0 = 0
0 OR 1 = 1 0 AND 1 = 0 0 XOR 1 = 1
1 OR 0 = 1 1 AND 0 = 0 1 XOR 0 = 1
1 OR 1 = 1 1 AND 1 = 1 1 XOR 1 = 0
в ЕРМ:
OR=!!VR#:|$;
AND=!!VR#:&$;
XOR=!!VR#:X$;
Добавлено ([mergetime]1190474592[/mergetime]):
короче говоря, | - побитовое или (сложение), & - побитовое и (умножение), XOR - это или отнять и
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.