![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Гость_Д'якон_* |
![]()
Сообщение
#81
|
![]() |
Во-первых, я матчасть не учил (не специализируюсь в этой области).
Во-вторых, все равно не знаю как эти 32бита реализовать на практике. |
|
|
Гость_Berserker_* |
![]()
Сообщение
#82
|
![]() |
31 бит, ибо у ЕРМ баг с изменением 32-го бита, приходится вручную умножать на -1, в общем рутина.
1) напиши функцию для возведения 2-ки в указанную степень 2) бит устанавливается так: !!VRy1:|1; установили первый бит !!VRy1:|2; установили второй бит !!VRy1:|4; установили третий бит !!VRy1:&4; Проверка на 3-й бит !!VRy1:&-3; сняли третий бит вроде так |
|
|
![]()
Сообщение
#83
|
|
![]() Immortal Сообщений: 670 Спасибо сказали: 14 раз ![]() |
Цитата(Berserker @ 15 Sep 2007, 22:02) !!VRy1:&-3; сняли третий бит Только не 3ий, а 2ой. устанавливать |(2^x) удалять &(2^xX-1) X-1 - инвертирует все биты. Нетрудно проверить, что для степенй 2ки это равнозначно добавить 1 и следом умножить на -1. -------------------- |
|
|
![]()
Сообщение
#84
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
а как действует удаление способом с отр. числом?
|
|
|
![]()
Сообщение
#85
|
|
![]() Immortal Сообщений: 670 Спасибо сказали: 14 раз ![]() |
Цитата(gamecreator @ 16 Sep 2007, 08:59) а как действует удаление способом с отр. числом? Известно как) Чтобы удалить 3ий бит, необходимо сделать "логическое И" с числом у которого на 3ей позиции стоит 0, а на всех остальных единица. "И" с единицей не меняет бит. "И" с нулем обнуляет бит. Чтобы посмотреть, что из себя представляют отрицательные числа достаточно стандартного виндошного калькулятора. В нем в расширенном режиме есть переход в 2ичную систему счисления. -------------------- |
|
|
Гость_Д'якон_* |
![]()
Сообщение
#86
|
![]() |
!!VRy1:&4; Проверка на 3-й бит
И как узнать что бит установлен, куда заносится ответ? |
|
|
![]()
Сообщение
#87
|
|
![]() Immortal Сообщений: 670 Спасибо сказали: 14 раз ![]() |
Открой хелп по 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) -------------------- |
|
|
![]()
Сообщение
#88
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
а я и не знал что можно XOR сделать в ЕРМ
|
|
|
Гость_Д'якон_* |
![]()
Сообщение
#89
|
![]() |
Не могу понять почему в у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_* |
![]()
Сообщение
#90
|
![]() |
1) y-переменные не прокатят, юзай v2
2) правильно: !!VRvx2:... |
|
|
Гость_Д'якон_* |
![]()
Сообщение
#91
|
![]() |
2 Berserker
Тут вопрос на счет скрипта с !?TL; Что ты думаешь о времени его выполнения |
|
|
Гость_Berserker_* |
![]()
Сообщение
#92
|
![]() |
в каком смысле?стоит ли его нагружать? если имелось ввиду это, то лучше его не юзать.
|
|
|
Гость_Д'якон_* |
![]()
Сообщение
#93
|
![]() |
Имелось ввиду:
Код !?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; Не будет ли этот скрипт слишком долгим по времени исполнения на больших картах? |
|
|
![]()
Сообщение
#94
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
немного оптимизировал код
Код !?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]): просьба ответить на вопрос в коментах кода |
|
|
Гость_Д'якон_* |
![]()
Сообщение
#95
|
![]() |
Потому что
!!IF:Wy1; - нужно поставить перед !!if |
|
|
Гость_Berserker_* |
![]()
Сообщение
#96
|
![]() |
1) Нет почти таких задач, которые требовали загрузки ежесекундного таймера.
2) Будет. |
|
|
Гость_Д'якон_* |
![]()
Сообщение
#97
|
![]() |
Помогите. Объясните в чем дело? Вопрос написан в коде.
Код !?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; |
|
|
![]()
Сообщение
#98
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
потому что у w1 и v1 нет общих битов. как например у 2 и 5.
|
|
|
Гость_Д'якон_* |
![]()
Сообщение
#99
|
![]() |
Не понял.
Хорошо, спрошу по-другому. Почему в первом случае (см. предыдущий пост) работает, а во втором нет, хотя v1 и там и там имеет одно и то же значение. |
|
|
![]()
Сообщение
#100
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
потому что ты присвоил 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 - это или отнять и |
|
|
![]() ![]() |
Текстовая версия | Сейчас: 4 October 2025 - 20:30 |
Copyright by Алексей Крючков
![]() Programming by Degtyarev Dmitry |
|