Про
двоичное представление чисел вы же в курсе?
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
... и так далее. До 2
32 или даже до 2
64 - зависит от системы, 32- или 64-битной и языка программирования.
Позиции битов считаются справа налево. Крайний правый бит имеет позицию 0. Позиция бита – это степень двойки. Если бит установлен в 1, надо прибавить 2 в степени этой позиции.
Например, число
3 = 0000 0011
означает 2
0 + 2
1 = 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. Это можно сделать простым сложением: 2
2 + 2
3 = 4+8 = 12. В двоичной системе:
12 = 0000 0000 0000 1100
Для удобства вычисления ВК прямо пишут значения, которые надо прибавить, чтобы получить нужную битовую маску – итоговое число, которое вы передадите в метод АПИ для запроса разрешения.
Ещё один пример, вам требуется стена wall и offline доступ в любое время. Смотрите в
таблице, какие там числа: wall (+8192) и offline (+65536). Значит, вам нужно просить разрешения для маски 73728