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: Помогите определить битовую маску

для людей не считающих в уме: открываем какой-нибудь калькулятор, тыкаем биты с нужным номером мышью и вуаля-получаем маску общую:

Вложение:
Снимок-Калькулятор.png
Снимок-Калькулятор.png [ 44.92 КБ | Просмотров: 19267 ]

Автор:  Феанор [ 06 сен 2011, 15:43 ]
Заголовок сообщения:  Re: Помогите определить битовую маску

Artur писал(а):
Феанор писал(а):
PS спрашивается зачем такие сложности, почему бы не хранить значения групп через запятую - но так больше места занимает, дольше проверки - побитовое же сравнение макси - наибыстрейшая операция.


Так исторически сложилось в этом модуле... ПО идее, по хорошему, нужно именно так и сделать - перечислять группы через запятую, а биллинг пускай сам определяет маску... Напишу в тудушку, но это будет не сразу

а я не про модуль писал, а про группы в биллинге вообще =)

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/