代码之家  ›  专栏  ›  技术社区  ›  Rits

关于位运算符的几个问题

  •  14
  • Rits  · 技术社区  · 14 年前

    我今天读到关于按位运算符的文章,它们对我来说似乎很方便。我也注意到苹果也在使用它们,例如 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 回复  |  直到 14 年前
        1
  •  26
  •   Jon Snyder    14 年前

    我不太熟悉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
  •  3
  •   filipe    14 年前
    days = DaysMonday | DaysWednesday | DaysFriday | DaysSaturday;
    days = days | DaysThursday;
    days = days & ~DaysSaturday;