Несколько вопросов о побитовых операторах - PullRequest
14 голосов
/ 16 ноября 2010

Сегодня я прочитал о побитовых операторах, и они кажутся мне очень удобными. Я также заметил, что Apple тоже использует их, например, с UIViewAutoresizing.

В моем приложении мне нужно следить за семью днями недели. Каждый день можно включить или отключить. Раньше у меня было семь BOOL, но сейчас я пытаюсь использовать для этого одно целое число:

enum {
    DaysMonday = 1 << 0,
    DaysTuesday = 1 << 1,
    DaysWednesday = 1 << 2,
    DaysThursday = 1 << 3,
    DaysFriday = 1 << 4,
    DaysSaturday = 1 << 5,
    DaysSunday = 1 << 6
};
typedef NSUInteger Days;

Мой вопрос: как я могу включить / отключить эти значения сейчас? Я знаю, что могу проверить переменную days на определенный день, например:

if (days & DaysThursday) {
    // thursday enabled
}

Но как мне ..

  1. включить четверг?
  2. отключить четверг?
  3. переключить четверг?
  4. включить все?
  5. отключить все?

Спасибо.

Ответы [ 2 ]

26 голосов
/ 16 ноября 2010

Я не слишком знаком с целью-c, но вот основы работы с побитовыми операторами.

Включить четверг

days = days | DaysThursday;

Отключить четверг

allDays = DaysMonday | DaysTuesday | ... | DaysSunday;
days = days & (allDays ^ DaysThursday);
// OR
days = days & ~DaysThursday;

Переключить четверг

days = days ^ DaysThursday; 

Включить все

allDays = DaysMonday | DaysTuesday | ... | DaysSunday;
days = days | allDays;
// OR
days = allDays;

Отключить все

days = days ^ days;
// OR
days = 0;
3 голосов
/ 16 ноября 2010
days = DaysMonday | DaysWednesday | DaysFriday | DaysSaturday;
days = days | DaysThursday;
days = days & ~DaysSaturday;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...