32-разрядное целое число без знака в NSDictionary - PullRequest
1 голос
/ 01 января 2011

Я занимаюсь разработкой клиента LiveJournal.com и у меня есть один вопрос. Можете ли вы объяснить, что это значит?

scalar Актуален, когда используется маска защиты. 32-разрядное целое число без знака, представляющее, какой из групп друзей пользователя разрешено просматривать это сообщение. Включите бит 0, чтобы позволить любому определенному другу прочитать его. В противном случае включите бит 1-30 для каждой группы друзей, которой разрешено читать. Бит 31 зарезервирован.

Что мне нужно добавить в NSMutableDictionary, если я хочу увидеть, например, группу с id = 6? Я не понимаю ...

1 Ответ

1 голос
/ 01 января 2011

Реализация системы безопасности работает путем предоставления или отсутствия группы друзей друзей для чтения журнала / текста.

Предполагается, что существует максимум 30 возможных групп, поскольку бит-0 равенопределенный, и бит-31 зарезервирован.

Код безопасности кодируется на unsigned int, что означает 32 бита, из которых биты от 0 до 31 имеют специальное значение.

  • LSb, бит0, если установлено значение 1, разрешает любому другу доступ для чтения.
  • , если бит0 равен 0, это означает, что следующие 30 битов, биты от 1 до 30, проверяются, чтобы определить, является ли группа i (от бита i) имеет доступ на чтение (бит установлен на 1) или нет (бит установлен на 0).

unsigned int можно представить как

  bit 31                     bit 0
  v                              v
  bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

например, десятичное значение 11 (0 ... 01011 или 8 + 3) представляется как

  00000000000000000000000000001011

, где биты 0, 1 и 3 установлены в 1,другие установлены на 0.

Итак, чтобы проверить, имеет ли друг доступ к журналу, возьмите бит доступа к журналу, например,

  11000000000000000000000000001011

, который вы видитечто фиПервый бит равен 1, поэтому все группы (все друзья) авторизованы.

Если доступ будет

  11000000000000000000000000001010

, то первый бит равен 0, поэтому необходимо проверить номер группы подоступ выше.Скажем, номер группы равен 1, вы сверяете с доступом выше

  11000000000000000000000000001010
                                1
                                ^
                        group one

и видите, что группа 1 авторизована.Если у вас будет

  11000000000000000000000000001000

, группа 1 будет не авторизована.

Для групп 3 и 30 доступ также разрешен:

  11000000000000000000000000001000
   *                          *

(MSb. Bit31 установлен на 1, но его значение зарезервировано, поэтому не стоит беспокоиться о его значении)

...