![]() |
|
|
![]()
|
|
| Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: нет Всего: 67 |
Что-то я никак не въеду как вычесть число из объединения чисел?
К примеру, воьзьмём двоичные числа. Есть 2 числа: 1) 1100 2) 0110 объединяем эти два числа: 1100 or 0110 = 1110 как теперь из результат исключитьпервое число, чтобы осталось второе? При условии, что объединение может включать различные комбинации чисел, т.е. может быть: 1100 or 0110 or 1000 ... or xxxx и нужно при некотором условии или добавить число в объединение или исключить, но чтобы другие числа можно было бы проверить (результат and число == число). |
|||
|
||||
| sdeniss |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 3.3.2006 Репутация: нет Всего: 1 |
xor 2 число не подойдет?
a or b xor b = a or 0 = a |
|||
|
||||
| Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: нет Всего: 67 |
Не получится так. Вот смотри: 1100 or 0110 = 1110 Теперь xor-им результат на первое число: 1110 xor 1100 = 0010 (не равно второму числу) Не получается xor-ом получить второе число из результата. Это сообщение отредактировал(а) Ciber SLasH - 26.3.2006, 17:24 |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
А почему объединение это or? -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
||||
|
||||
| Бегемот |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 26.1.2005 Где: На границе Европы и Азии Репутация: нет Всего: 3 |
Ciber SLasH, ну, а если ничего не вычислять, а просто сохранить нужные значения до того как произведёшь объединение?! А в случае ЧАВО - восстановить попорченное число!
|
|||
|
||||
| nworm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 4 Всего: 8 |
Да, нельзя. Но кое-что восстановить можно. Это ясно сразу из определения "or": X Y | Z = X or Y 0 0 | 0 0 1 | 1 1 0 | 1 1 1 | 1 Тогда Y Z | X = f(Y,Z) 0 0 | 0 0 1 | 1 1 0 | невозможно 1 1 | 0 или 1 |
|||
|
||||
| Ciber SLasH |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: нет Всего: 67 |
Вобщем я всё это спрашивал для того чтобы понять как исключается стиль из функции GetWindowLong.
Вот есть к примеру окно (с хэндлом Wnd), узнаём его стили:
Чтобы исключить из этого окна какой-то стиль (к примеру WS_CAPTION), мы делаем следущее:
А как работает алгоритм исключения не понятно? Ведь функция GetWindowLong возвращает 16-битное число, в котором определённые биты отвечают за стиль окна. Это сообщение отредактировал(а) Ciber SLasH - 27.3.2006, 13:21 |
||||
|
|||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
and not в данном случае обнуляет 1 в 16-битно числе в нужном месте и все... Или я ошибаюсь?
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: нет Всего: 67 |
Верно. Короче я понял алгоритм этой функции. Вся соль в том, что каждый бит этого слова отвечает за определённый стиль окна. И поэтому ничего исключать здесь не надо, — надо всего лишь обнулить бит. Тогда мне бы подошло множество. Из множества можно исключать значения. Но к сожаления в Delphi нельзя определить такое множество: var MN: set of Integer; |
|||
|
||||
| nworm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 4 Всего: 8 |
А какая цель-то всего этого? Чем не устраивает имеющийся способ?
|
|||
|
||||
| Ciber SLasH |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: нет Всего: 67 |
К примеру отлов нажатий клавиш. Когда срабатывает hook, то нужно проверить, нужно ли блокировать эту клавишу или нет. И ещё есть функция, которая добавляет/исключает ту или иную клавишу из наблюдения. Я сначала хотел описать множество, в которое бы добавлялась нужная клавиша, если надо её отловить или удалялась эта клавиша, если не надо её отлавливать. К примеру:
есть также процедура, которая исключает/добавляет клавишу:
и есть процедура отлова клавиш, которая проверяет клавишу на вхождение в множество:
|
||||||
|
|||||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |