关于按位运算符的一些问题

时间:2010-11-15 21:54:10

标签: iphone objective-c cocoa-touch ios bit-manipulation

我今天读到了关于按位运算符的内容,它们对我来说似乎很方便。我也注意到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. 禁用所有?
  6. 谢谢。

2 个答案:

答案 0 :(得分:26)

我对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;

答案 1 :(得分:3)

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