Некоторые вопросы о побитовых операторах

Я читал о побитовых операторах сегодня, и они мне кажутся мне очень удобными. Я также заметил, что 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
}

Но как я..

  • включить thursday?
  • отключить четверг?
  • toggle thursday?
  • включить все?
  • отключить все?

Спасибо.

Ответы

Ответ 1

Я не слишком хорошо знаком с objective-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;

Ответ 2

days = DaysMonday | DaysWednesday | DaysFriday | DaysSaturday;
days = days | DaysThursday;
days = days & ~DaysSaturday;