Задать вопрос
yarkov
@yarkov
Помог ответ? Отметь решением.

Как разобраться в битовых масках или как их там?

https://vk.com/dev/permissions
Никак не могу въехать как сделать с помощью такого набор разрешений у себя в API. Например чтоб юзер мог постить статьи и комментировать, но не мог удалять. Ну и так далее.
Объясните как дауну или дайте что почитать, пожалуйста.
  • Вопрос задан
  • 5154 просмотра
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
sergiks
@sergiks Куратор тега ВКонтакте
♬♬
Про двоичное представление чисел вы же в курсе?
0 = 0000 0000
1 = 0000 0001
2 = 0000 0010
3 = 0000 0011
4 = 0000 0100
5 = 0000 0101
6 = 0000 0110
7 = 0000 0111
8 = 0000 1000
9 = 0000 1001

... и так далее. До 232 или даже до 264 - зависит от системы, 32- или 64-битной и языка программирования.

Позиции битов считаются справа налево. Крайний правый бит имеет позицию 0. Позиция бита – это степень двойки. Если бит установлен в 1, надо прибавить 2 в степени этой позиции.

Например, число 3 = 0000 0011 означает 20 + 21 = 1 + 2 = 3.

Примечательно, что степени двойки – 0, 1, 2, 4, 8, 16, 32, 64, ... – выражаются всего одним включённым битом, одной единичкой, остальные биты – нули.

Битовые маски – это договорённость, что каждый бит (каждая позиция) значит что-то определённое, что может быть включено или выключено, 1 или 0. Как линейка выключателей.

Например, с разрешениями ВКонтакте:
1 - бит 0 - notify
2 - бит 1 - friends
4 - бит 2 - photos
8 - бит 3 - audio

У ВК линейка длинная, состоит из 32 «выключателей».

Допустим, вашему приложению требуются разрешения photos и audio – биты 2 и 3 надо установить в 1, остальные 0. Это можно сделать простым сложением: 22 + 23 = 4+8 = 12. В двоичной системе: 12 = 0000 0000 0000 1100

Для удобства вычисления ВК прямо пишут значения, которые надо прибавить, чтобы получить нужную битовую маску – итоговое число, которое вы передадите в метод АПИ для запроса разрешения.

Ещё один пример, вам требуется стена wall и offline доступ в любое время. Смотрите в таблице, какие там числа: wall (+8192) и offline (+65536). Значит, вам нужно просить разрешения для маски 73728
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы