Цитата(ded_Pihto @ 29 Jan 2006, 19:06)
Цитата(Ennin @ 29 Jan 2006, 13:43)
опечаточка там. не &, а |. хотя смысл двоякий: если бит уже есть, то ставлю. правда, все остальные биты снимаю

так что там |. Поэтому, кстати, и не работало &4: если бита изначально нет, то ты все слово флагов кричи своим &4 обращаешь в ноль. надо |4.
Теперь другое дело (просто прояснить хотел). Только понятнее так было бы: если "VRi:[/color]
&32768" (32768 = 2^15), то это обычная проверка на наличие бита, если i равно 0, то бит №15 (32768) отсутствует, если i = 32768, то бит №15 присутствует.
Естественно снять таким образом бит не получится. Нужно использовать [/color]
&~32768, только я не уверен, что ERM данной версии позволяет использовать операцию ~(отрицание)[/color]
не позволяет. и не будет позволять. снять бит можно с помощью других методов. кстати, если уж еще понятнее, то i==32768 при условии наличия бита только ПОСЛЕ выполнения VR оператора.
Цитата(ded_Pihto @ 29 Jan 2006, 19:06)
Цитата(Bourn @ 29 Jan 2006, 11:53)
можно + и - но как Энин сказал это не по програмерски
Это, конечно, не совсем правильно использовать эти операции для работы с битами (можно лишнего навычитать и наприбавлять), но если есть уверенность, что ничего лишнего не натворишь, то смело можно использовать: +<2^x> установить бит <x> (2^x - 2 в степени x), -<2^x> снять бит <x>, естественно, заранее нужно знать нет бита (для сложения) и есть ли бит (для вычитания).
так-то оно так. но о том и разговор, что иногда невозможно знать заранее
Цитата(ded_Pihto @ 29 Jan 2006, 19:06)
Т.к. не нашёл в хелпе операции ~(отрицание), то другого способа, чтобы снять бит, кроме как вычитать, не вижу.[/color]
ну, это зря, зря. Я специально мыкался, выясняя подробности для заполнения секции LOGICAL BIT OPERAIONS в !!VR.
Цитата
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.
то бишь
Цитата
Можно также очистить (снять) нужный бит без затрагивания остальных. Чтобы сделать так, используйте обратное к значению бита число минус один. Например, чтобы снять 5й бит (16), используйте -17, !!VRv1:&-17;
Чтобы снять или проверить несколько битов, используйте сумму значений. Например, чтобы снять 4й (8), 3й (4) и 1й (1) биты, используйте &-14 ( =-1*(8+3+1)-1 ).
Чтобы проверить эти же биты, используйте &13.
Таким образом для того, чтобы снять бит 32768, нужно юзать !!VRi:&-32769;