Rits
Rits

Reputation: 5175

Some questions about bitwise operators

I read about bitwise operators today and they seem rather handy to me. I also noticed Apple uses them too, for example with UIViewAutoresizing.

In my app I need to keep track of the seven days of the week. Each day can be either enabled or disabled. I used to have seven BOOL's, but now I'm trying to use a single integer for this:

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;

My question is, how can I enable/disable those values now? I know I can check a variable days for a specific day like this:

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

But how do I..

  1. enable thursday?
  2. disable thursday?
  3. toggle thursday?
  4. enable all?
  5. disable all?

Thank you.

Upvotes: 14

Views: 4138

Answers (2)

Jon Snyder
Jon Snyder

Reputation: 2009

I'm not too familiar with objective-c, but here are the basics when dealing with bitwise operators.

Enable Thursday

days = days | DaysThursday;

Disable Thursday

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

Toggle Thursday

days = days ^ DaysThursday; 

Enable All

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

Disable All

days = days ^ days;
// OR
days = 0;

Upvotes: 26

filipe
filipe

Reputation: 3380

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

Upvotes: 3

Related Questions