![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
всем привет.
наверное не для кого не секрет, что у меня сложности с двоичными операциями. посему, решил поинтересоваться у более опытных. имеется такой код:
http://liveworkspace.org/code/c8c0c8130812...b66bc14a01b8a91 в этом коде мне не нравится то, что в функции test() для обработки аргумента необходимо писать if для всех членов определенного енума. вопроса два: 1. каким образом можно записать это в виде цикла так, чтоб в цикле перебрать и проверить все комбинации? 2. что нужно сделать с аргументом для того чтоб его можно было передать в switch() ? благодарен. |
|||
|
||||
| kuzulis |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
А ничего тут и не сделать особо. Текущий вариант самый быстрый и правильный, ИМХО.
Всякие циклы и т.п. только загромоздят. Можно на крайняк так:
Это сообщение отредактировал(а) kuzulis - 26.12.2011, 21:18 |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Так подойдёт?
Это сообщение отредактировал(а) feodorv - 26.12.2011, 21:36 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
kuzulis, feodorv, неее, рыбятушки. что-то это все не то. у меня было два вопроса. ответ на первый я почти получил. но и он какой-то не логичный, как мне кажется..
вот я упаковываю значения при помощи |(or). в результате, я получаю что-то типа множества. я полагал, что по этому множеству можно как-то проитерироваться. не? Добавлено @ 22:18 feodorv, не могли бы Вы словами рассказать, что тут происходит?: Это сообщение отредактировал(а) boostcoder - 26.12.2011, 22:35 |
|||
|
||||
| feodorv |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Вопрос я совсем не понял, даже приблизительно. Была надежда, что из ответа на первый можно будет вывести второй, но нет))) Происходит побитовый сдвиг влево изначальной единички на нужное число позиций:
Вот как раз и происходит обход всех возможных битов Добавлено через 4 минуты и 33 секунды
Аааа
Добавлено через 8 минут и 57 секунд Или:
Только тут уж железно arg на 0 предварительно проверить нужно. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||||||
|
|||||||||||
| newbee |
|
||||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
Если сложно вдуплить битовые сдвиги, можно запихать все возможные маски в массив и пройтись по нему.
Выше я очень бегло посмотрела примеры, как-то сложно...
-------------------- You're face to face With man who sold the world |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
boostcoder, http://cplusplus.com/reference/stl/bitset/test/ или http://cplusplus.com/reference/stl/bitset/operator[]/ в дополение : http://cplusplus.com/reference/stl/bitset/count/ http://cplusplus.com/reference/stl/bitset/any/ http://cplusplus.com/reference/stl/bitset/none/ |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
mes, не нужен мне битсет.
всем спасибо. сейчас попробую все это дело усвоить... |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
может и не нужен, но может служить выходом для тех, кому трудно обращаться с битами.. ваш первый пример : http://liveworkspace.org/code/6d76dce75302...a78172b15ba5b99 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ну так я пытаюсь разобраться, а Вы меня обратно, в мое же болото |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |