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