forum.bitel.ru http://forum.bitel.ru/ |
|
Помогите определить битовую маску http://forum.bitel.ru/viewtopic.php?f=30&t=5830 |
Страница 1 из 1 |
Автор: | Universe [ 30 авг 2011, 14:34 ] |
Заголовок сообщения: | Помогите определить битовую маску |
Объясните, пожалуйста, как посчитать битовую маску групп № 25, 26, 30, 31, 32, 33. |
Автор: | snark [ 30 авг 2011, 16:56 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
М.б. это (см. Работа с группами)? |
Автор: | Universe [ 31 авг 2011, 11:50 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
Задам вопрос по другому: Как считается вот такое выражение (функция): mask = (1<<0) | (1<<1) | ( 1 << 2) = 1 + 2 + 4 = 7 Почему равно именно этому??? http://bgbilling.ru/v5.2/doc/ch04s02.html Код: #битовая маска групп для которых выгружаются реестры. Определяется следующим образом: откройте справочник групп, #выделите позиции групп, начинающиеся с 0. Затем посчитайте выражение mask = 1<<gr1 | 1<<gr2...| 1<<grN group.mask=262144 Как это считать? |
Автор: | skyb [ 31 авг 2011, 13:51 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
Тут все просто - логические выражения в бинарном коде. |
Автор: | skyb [ 31 авг 2011, 13:56 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
Напиши группы - посчитаю, и в вики пример выложим |
Автор: | Universe [ 31 авг 2011, 15:19 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
skyb писал(а): Напиши группы - посчитаю, и в вики пример выложим группы id = 25, 26, 30, 31, 32, 33 Могу даже в бинарном коде написать: 25=11001 26=11010 30=11110 31=11111 32=100000 33=100001 |
Автор: | Artur [ 31 авг 2011, 15:41 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
Universe писал(а): skyb писал(а): Напиши группы - посчитаю, и в вики пример выложим группы id = 25, 26, 30, 31, 32, 33 Могу даже в бинарном коде написать: 25=11001 26=11010 30=11110 31=11111 32=100000 33=100001 считаем: mask = ( 1 << 25 ) | ( 1 << 26 ) | ( 1 << 30 ) | ( 1 << 31 ) | ( 1 << 32 ) | ( 1 << 33 ) = 1 * 2^25 + 1 * 2^26 + 1 * 2^30 + 1 * 2^31 + 1 * 2^32 + 1 * 2^33 = большое число типа long Формула m << n в двоичной арифметике означает, что число m нужно умножить на 2 в степени n. А операция | эквивалентна сложению. |
Автор: | Universe [ 31 авг 2011, 15:54 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
Цитата: считаем: mask = ( 1 << 25 ) | ( 1 << 26 ) | ( 1 << 30 ) | ( 1 << 31 ) | ( 1 << 32 ) | ( 1 << 33 ) = 1 * 2^25 + 1 * 2^26 + 1 * 2^30 + 1 * 2^31 + 1 * 2^32 + 1 * 2^33 = большое число типа long Это получается: 16 206 790 663 Ты уверен, что это так считается? |
Автор: | Artur [ 31 авг 2011, 16:23 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
Universe писал(а): Цитата: считаем: mask = ( 1 << 25 ) | ( 1 << 26 ) | ( 1 << 30 ) | ( 1 << 31 ) | ( 1 << 32 ) | ( 1 << 33 ) = 1 * 2^25 + 1 * 2^26 + 1 * 2^30 + 1 * 2^31 + 1 * 2^32 + 1 * 2^33 = большое число типа long Это получается: 16 206 790 663 Ты уверен, что это так считается? В документации написано Цитата: mask = 1<<gr1 | 1<<gr2...| 1<<grN Если вы привели реальные id групп из вашего биллинга, то считается именно так |
Автор: | skyb [ 31 авг 2011, 16:45 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
Artur писал(а): Universe писал(а): skyb писал(а): Напиши группы - посчитаю, и в вики пример выложим группы id = 25, 26, 30, 31, 32, 33 Могу даже в бинарном коде написать: 25=11001 26=11010 30=11110 31=11111 32=100000 33=100001 считаем: mask = ( 1 << 25 ) | ( 1 << 26 ) | ( 1 << 30 ) | ( 1 << 31 ) | ( 1 << 32 ) | ( 1 << 33 ) = 1 * 2^25 + 1 * 2^26 + 1 * 2^30 + 1 * 2^31 + 1 * 2^32 + 1 * 2^33 = большое число типа long Формула m << n в двоичной арифметике означает, что число m нужно умножить на 2 в степени n. А операция | эквивалентна сложению. Вот в доке или на вики бы так.. |
Автор: | Universe [ 31 авг 2011, 16:47 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
Цитата: Если вы привели реальные id групп из вашего биллинга, то считается именно так Спасибо за подтверждение! Надеюсь эта тема будет полезна кому-нибудь в будущем. ) |
Автор: | Artur [ 31 авг 2011, 16:51 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
skyb писал(а): Artur писал(а): Universe писал(а): skyb писал(а): Напиши группы - посчитаю, и в вики пример выложим группы id = 25, 26, 30, 31, 32, 33 Могу даже в бинарном коде написать: 25=11001 26=11010 30=11110 31=11111 32=100000 33=100001 считаем: mask = ( 1 << 25 ) | ( 1 << 26 ) | ( 1 << 30 ) | ( 1 << 31 ) | ( 1 << 32 ) | ( 1 << 33 ) = 1 * 2^25 + 1 * 2^26 + 1 * 2^30 + 1 * 2^31 + 1 * 2^32 + 1 * 2^33 = большое число типа long Формула m << n в двоичной арифметике означает, что число m нужно умножить на 2 в степени n. А операция | эквивалентна сложению. Вот в доке или на вики бы так.. Нет желания выложить? =) |
Автор: | skyb [ 31 авг 2011, 17:02 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
Artur писал(а): skyb писал(а): Artur писал(а): Universe писал(а): skyb писал(а): Напиши группы - посчитаю, и в вики пример выложим группы id = 25, 26, 30, 31, 32, 33 Могу даже в бинарном коде написать: 25=11001 26=11010 30=11110 31=11111 32=100000 33=100001 считаем: mask = ( 1 << 25 ) | ( 1 << 26 ) | ( 1 << 30 ) | ( 1 << 31 ) | ( 1 << 32 ) | ( 1 << 33 ) = 1 * 2^25 + 1 * 2^26 + 1 * 2^30 + 1 * 2^31 + 1 * 2^32 + 1 * 2^33 = большое число типа long Формула m << n в двоичной арифметике означает, что число m нужно умножить на 2 в степени n. А операция | эквивалентна сложению. Вот в доке или на вики бы так.. Нет желания выложить? =) Завтро, и ещё более наглядно распишу как работать с группами gr&(1<<19)=0 Вот это объясню |
Автор: | skyb [ 01 сен 2011, 07:39 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
http://wiki.bgbilling.ru/index.php/%D0% ... 0%BA%D0%B8 Поправьте если ошибся. А, и да, если все правильно - может в доку добавить ссылку? |
Автор: | Феанор [ 01 сен 2011, 11:16 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
Я думаю стоит объяснить что группа - это битовая маска, а тот тут девушка стала бинарные представления групп приводить. Группа 32, это не 10000 в двоичном коде, а 32й бит в маске, т.е. 000000000000000000000000000000000000100000000000000000000000000000000000. Если абонент в нескольких группах, то биты устанавливаются соответственно в разрядах совпадающих с номерами групп: 000000000000000000000000000000000000100000000000000000000000000001000001 - группы 1, 6 и 32 к примеру. Вычислив маску и получив двоичное число - переводим ее в десятичную запись чем угодно (хоть виндовым калькулятором) - и все. По сути алгоритм приведенный выше и есть привод двоичного значения маски в десятичный вид. Отсюда и ограничение на 64 группы в биллинге - именно столько бит в типе данных long. PS спрашивается зачем такие сложности, почему бы не хранить значения групп через запятую - но так больше места занимает, дольше проверки - побитовое же сравнение макси - наибыстрейшая операция. |
Автор: | skyb [ 01 сен 2011, 11:31 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
2 Феанор добавил бы в вики |
Автор: | Artur [ 01 сен 2011, 16:31 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
Феанор писал(а): PS спрашивается зачем такие сложности, почему бы не хранить значения групп через запятую - но так больше места занимает, дольше проверки - побитовое же сравнение макси - наибыстрейшая операция. Так исторически сложилось в этом модуле... ПО идее, по хорошему, нужно именно так и сделать - перечислять группы через запятую, а биллинг пускай сам определяет маску... Напишу в тудушку, но это будет не сразу |
Автор: | skyb [ 01 сен 2011, 19:21 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
Artur писал(а): Напишу в тудушку, но это будет не сразу Я тут тока разорался с битовыми масками )))) |
Автор: | Artur [ 05 сен 2011, 17:09 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
skyb писал(а): Artur писал(а): Напишу в тудушку, но это будет не сразу Я тут тока разорался с битовыми масками )))) И это хорошо! Я ж не завтра все переделаю =) |
Автор: | dimOn [ 06 сен 2011, 13:39 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
для людей не считающих в уме: открываем какой-нибудь калькулятор, тыкаем биты с нужным номером мышью и вуаля-получаем маску общую: Вложение:
|
Автор: | Феанор [ 06 сен 2011, 15:43 ] |
Заголовок сообщения: | Re: Помогите определить битовую маску |
Artur писал(а): Феанор писал(а): PS спрашивается зачем такие сложности, почему бы не хранить значения групп через запятую - но так больше места занимает, дольше проверки - побитовое же сравнение макси - наибыстрейшая операция. Так исторически сложилось в этом модуле... ПО идее, по хорошему, нужно именно так и сделать - перечислять группы через запятую, а биллинг пускай сам определяет маску... Напишу в тудушку, но это будет не сразу а я не про модуль писал, а про группы в биллинге вообще =) |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |