Помогите определить битовую маску

Система выгрузки реестров для системы Город банка Уралсиб.

Помогите определить битовую маску

Сообщение Universe » 30 авг 2011, 14:34

Объясните, пожалуйста, как посчитать битовую маску групп № 25, 26, 30, 31, 32, 33.
Работаем с 5.2.
Аватара пользователя
Universe
Клиент
 
Сообщения: 187
Зарегистрирован: 14 июл 2011, 13:32
Откуда: г.Челябинск

Re: Помогите определить битовую маску

Сообщение snark » 30 авг 2011, 16:56

М.б. это (см. Работа с группами)?
snark
Клиент
 
Сообщения: 3944
Зарегистрирован: 12 фев 2008, 18:10

Re: Помогите определить битовую маску

Сообщение Universe » 31 авг 2011, 11:50

Задам вопрос по другому:
Как считается вот такое выражение (функция):
mask = (1<<0) | (1<<1) | ( 1 << 2) = 1 + 2 + 4 = 7
Почему равно именно этому???

http://bgbilling.ru/v5.2/doc/ch04s02.html

$this->bbcode_second_pass_code('', '#битовая маска групп для которых выгружаются реестры. Определяется следующим образом: откройте справочник групп,
#выделите позиции групп, начинающиеся с 0. Затем посчитайте выражение mask = 1<<gr1 | 1<<gr2...| 1<<grN
group.mask=262144')

Как это считать?
Работаем с 5.2.
Аватара пользователя
Universe
Клиент
 
Сообщения: 187
Зарегистрирован: 14 июл 2011, 13:32
Откуда: г.Челябинск

Re: Помогите определить битовую маску

Сообщение skyb » 31 авг 2011, 13:51

Тут все просто - логические выражения в бинарном коде.
$this->bbcode_second_pass_code('', '
Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
')
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений
Аватара пользователя
skyb
Клиент
 
Сообщения: 7166
Зарегистрирован: 03 авг 2009, 18:42
Откуда: Благовещенск

Re: Помогите определить битовую маску

Сообщение skyb » 31 авг 2011, 13:56

Напиши группы - посчитаю, и в вики пример выложим
$this->bbcode_second_pass_code('', '
Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
')
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений
Аватара пользователя
skyb
Клиент
 
Сообщения: 7166
Зарегистрирован: 03 авг 2009, 18:42
Откуда: Благовещенск

Re: Помогите определить битовую маску

Сообщение Universe » 31 авг 2011, 15:19

$this->bbcode_second_pass_quote('skyb', '')апиши группы - посчитаю, и в вики пример выложим

группы id = 25, 26, 30, 31, 32, 33
Могу даже в бинарном коде написать:
25=11001
26=11010
30=11110
31=11111
32=100000
33=100001
Работаем с 5.2.
Аватара пользователя
Universe
Клиент
 
Сообщения: 187
Зарегистрирован: 14 июл 2011, 13:32
Откуда: г.Челябинск

Re: Помогите определить битовую маску

Сообщение Artur » 31 авг 2011, 15:41

$this->bbcode_second_pass_quote('Universe', '')$this->bbcode_second_pass_quote('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.
А операция | эквивалентна сложению.
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".
Аватара пользователя
Artur
Разработчик
 
Сообщения: 940
Зарегистрирован: 27 янв 2010, 16:12
Откуда: Уфа
Вернуться к началу

Re: Помогите определить битовую маску

Сообщение Universe » 31 авг 2011, 15:54

$this->bbcode_second_pass_quote('', '')читаем:
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 Ты уверен, что это так считается?
Работаем с 5.2.
Аватара пользователя
Universe
Клиент
 
Сообщения: 187
Зарегистрирован: 14 июл 2011, 13:32
Откуда: г.Челябинск
Вернуться к началу

Re: Помогите определить битовую маску

Сообщение Artur » 31 авг 2011, 16:23

$this->bbcode_second_pass_quote('Universe', '')$this->bbcode_second_pass_quote('', '')читаем:
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 Ты уверен, что это так считается?


В документации написано
$this->bbcode_second_pass_quote('', 'm')ask = 1<<gr1 | 1<<gr2...| 1<<grN

Если вы привели реальные id групп из вашего биллинга, то считается именно так
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".
Аватара пользователя
Artur
Разработчик
 
Сообщения: 940
Зарегистрирован: 27 янв 2010, 16:12
Откуда: Уфа
Вернуться к началу

Re: Помогите определить битовую маску

Сообщение skyb » 31 авг 2011, 16:45

$this->bbcode_second_pass_quote('Artur', '')$this->bbcode_second_pass_quote('Universe', '')$this->bbcode_second_pass_quote('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.
А операция | эквивалентна сложению.

Вот в доке или на вики бы так..;)
$this->bbcode_second_pass_code('', '
Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
')
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений
Аватара пользователя
skyb
Клиент
 
Сообщения: 7166
Зарегистрирован: 03 авг 2009, 18:42
Откуда: Благовещенск
Вернуться к началу

Re: Помогите определить битовую маску

Сообщение Universe » 31 авг 2011, 16:47

$this->bbcode_second_pass_quote('', '')сли вы привели реальные id групп из вашего биллинга, то считается именно так


Спасибо за подтверждение!

Надеюсь эта тема будет полезна кому-нибудь в будущем. )
Работаем с 5.2.
Аватара пользователя
Universe
Клиент
 
Сообщения: 187
Зарегистрирован: 14 июл 2011, 13:32
Откуда: г.Челябинск
Вернуться к началу

Re: Помогите определить битовую маску

Сообщение Artur » 31 авг 2011, 16:51

$this->bbcode_second_pass_quote('skyb', '')$this->bbcode_second_pass_quote('Artur', '')$this->bbcode_second_pass_quote('Universe', '')$this->bbcode_second_pass_quote('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.
А операция | эквивалентна сложению.

Вот в доке или на вики бы так..;)

Нет желания выложить? =)
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".
Аватара пользователя
Artur
Разработчик
 
Сообщения: 940
Зарегистрирован: 27 янв 2010, 16:12
Откуда: Уфа
Вернуться к началу

Re: Помогите определить битовую маску

Сообщение skyb » 31 авг 2011, 17:02

$this->bbcode_second_pass_quote('Artur', '')$this->bbcode_second_pass_quote('skyb', '')$this->bbcode_second_pass_quote('Artur', '')$this->bbcode_second_pass_quote('Universe', '')$this->bbcode_second_pass_quote('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
Вот это объясню
$this->bbcode_second_pass_code('', '
Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
')
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений
Аватара пользователя
skyb
Клиент
 
Сообщения: 7166
Зарегистрирован: 03 авг 2009, 18:42
Откуда: Благовещенск
Вернуться к началу

Re: Помогите определить битовую маску

Сообщение skyb » 01 сен 2011, 07:39

http://wiki.bgbilling.ru/index.php/%D0% ... 0%BA%D0%B8
Поправьте если ошибся.
А, и да, если все правильно - может в доку добавить ссылку?
$this->bbcode_second_pass_code('', '
Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
')
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений
Аватара пользователя
skyb
Клиент
 
Сообщения: 7166
Зарегистрирован: 03 авг 2009, 18:42
Откуда: Благовещенск

Re: Помогите определить битовую маску

Сообщение Феанор » 01 сен 2011, 11:16

Я думаю стоит объяснить что группа - это битовая маска, а тот тут девушка стала бинарные представления групп приводить.
Группа 32, это не 10000 в двоичном коде, а 32й бит в маске, т.е. 000000000000000000000000000000000000100000000000000000000000000000000000.
Если абонент в нескольких группах, то биты устанавливаются соответственно в разрядах совпадающих с номерами групп:
000000000000000000000000000000000000100000000000000000000000000001000001 - группы 1, 6 и 32 к примеру. Вычислив маску и получив двоичное число - переводим ее в десятичную запись чем угодно (хоть виндовым калькулятором) - и все. По сути алгоритм приведенный выше и есть привод двоичного значения маски в десятичный вид.
Отсюда и ограничение на 64 группы в биллинге - именно столько бит в типе данных long.

PS спрашивается зачем такие сложности, почему бы не хранить значения групп через запятую - но так больше места занимает, дольше проверки - побитовое же сравнение макси - наибыстрейшая операция.
Феанор
Клиент
 
Сообщения: 431
Зарегистрирован: 30 мар 2009, 17:51

Re: Помогите определить битовую маску

Сообщение skyb » 01 сен 2011, 11:31

2 Феанор добавил бы в вики ;)
$this->bbcode_second_pass_code('', '
Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
')
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений
Аватара пользователя
skyb
Клиент
 
Сообщения: 7166
Зарегистрирован: 03 авг 2009, 18:42
Откуда: Благовещенск

Re: Помогите определить битовую маску

Сообщение Artur » 01 сен 2011, 16:31

$this->bbcode_second_pass_quote('Феанор', 'P')S спрашивается зачем такие сложности, почему бы не хранить значения групп через запятую - но так больше места занимает, дольше проверки - побитовое же сравнение макси - наибыстрейшая операция.


Так исторически сложилось в этом модуле... ПО идее, по хорошему, нужно именно так и сделать - перечислять группы через запятую, а биллинг пускай сам определяет маску... Напишу в тудушку, но это будет не сразу
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".
Аватара пользователя
Artur
Разработчик
 
Сообщения: 940
Зарегистрирован: 27 янв 2010, 16:12
Откуда: Уфа
Вернуться к началу

Re: Помогите определить битовую маску

Сообщение skyb » 01 сен 2011, 19:21

$this->bbcode_second_pass_quote('Artur', '')апишу в тудушку, но это будет не сразу

Я тут тока разорался с битовыми масками ))))
$this->bbcode_second_pass_code('', '
Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
')
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений
Аватара пользователя
skyb
Клиент
 
Сообщения: 7166
Зарегистрирован: 03 авг 2009, 18:42
Откуда: Благовещенск
Вернуться к началу

Re: Помогите определить битовую маску

Сообщение Artur » 05 сен 2011, 17:09

$this->bbcode_second_pass_quote('skyb', '')$this->bbcode_second_pass_quote('Artur', '')апишу в тудушку, но это будет не сразу

Я тут тока разорался с битовыми масками ))))

И это хорошо! Я ж не завтра все переделаю =)
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".
Аватара пользователя
Artur
Разработчик
 
Сообщения: 940
Зарегистрирован: 27 янв 2010, 16:12
Откуда: Уфа
Вернуться к началу

Re: Помогите определить битовую маску

Сообщение dimOn » 06 сен 2011, 13:39

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

Снимок-Калькулятор.png
dimOn
 
Сообщения: 5918
Зарегистрирован: 30 май 2008, 15:51

Re: Помогите определить битовую маску

Сообщение Феанор » 06 сен 2011, 15:43

$this->bbcode_second_pass_quote('Artur', '')$this->bbcode_second_pass_quote('Феанор', 'P')S спрашивается зачем такие сложности, почему бы не хранить значения групп через запятую - но так больше места занимает, дольше проверки - побитовое же сравнение макси - наибыстрейшая операция.


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

а я не про модуль писал, а про группы в биллинге вообще =)
Феанор
Клиент
 
Сообщения: 431
Зарегистрирован: 30 мар 2009, 17:51
Вернуться к началу


Вернуться в Модуль Gorod

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron