2010-11-15 14 views
14

Ho letto di operatori bit a bit oggi e mi sembrano piuttosto utili. Ho anche notato che Apple li usa anche, ad esempio con UIViewAutoresizing.Alcune domande sugli operatori bit a bit

Nella mia app ho bisogno di tenere traccia dei sette giorni della settimana. Ogni giorno può essere abilitato o disabilitato. Ho usato per avere sette BOOL 's, ma ora sto cercando di utilizzare un singolo intero per questo:

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; 

La mia domanda è, come posso attivare/disattivare quei valori oggi? So che posso controllare una variabile days per un giorno specifico come questo:

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

Ma come faccio ..

  1. effettuato giovedi?
  2. disabilitare giovedì?
  3. giovedì?
  4. abilitare tutto?
  5. disabilitare tutto?

Grazie.

+0

mi limiterò a lasciare [questo] (http://graphics.stanford.edu/~seander/bithacks.html) qui. – outis

+1

Harkens torna ai giorni in cui passavamo molto tempo a vedere quanto potevamo spremere i dati. Operatori bit a bit per situazioni on/off come questa, usando due bit per cose con 3 o 4 stati, ecc. Ancora mi chino in quel modo a volte ma sono molto più rilassato ora che lo spazio e la larghezza di banda sono aumentati così drammaticamente. –

risposta

26

Non ho molta familiarità con l'obiettivo-c, ma qui ci sono le basi quando si tratta di operatori bit a bit.

Abilita Giovedi

days = days | DaysThursday; 

Disabilita Giovedi

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

Toggle Giovedi

days = days^DaysThursday; 

Abilita tutto

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

Disabilita tutto

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

Grazie. Ne ho aggiunte altre, potresti dare un'occhiata? – Rits

+1

Aggiunto l'abilitazione di tutti e disabilita tutte le risposte. –

+0

Non sarebbe "Disable Thursday" essere meglio così ?: days = days &! DaysThursday; – v01d

3
days = DaysMonday | DaysWednesday | DaysFriday | DaysSaturday; 
days = days | DaysThursday; 
days = days & ~DaysSaturday; 
Problemi correlati