Este é um pequeno resumo para utilizar máscara-de-bits quando você precisar armazenar flags booleanas em uma única variável inteira. Abaixo estão dois exemplos, um em C e outro em Python.
Linguagem C
#define FLAG_TEMPERATURA 1 #define FLAG_ALARME_1 2 #define FLAG_ALARME_2 4 #define FLAG_INTERRUPCAO 8
Lembre-se de organizar em potências de 2.
1) Para verificar o valor utilize a lógica AND:
if (flags & FLAG_TEMPERATURA) {
/* ... */
}
2) Para setar em TRUE o valor, utilize a lógica OR:
flags |= FLAG_ALARME_1;
3) Para setar em FALSE o valor, utilize a lógica AND e NOT:
flags &= ~FLAG_ALARME_2;
Python
#!/usr/bin/python FLAG_TEMPERATURA = 1<<0 # 1 FLAG_ALARME_1 = 1<<1 # 2 FLAG_ALARME_2 = 1<<2 # 4 FLAG_INTERRUPCAO = 1<<3 # 8 # comeca setando a flag flags = FLAG_TEMPERATURA # verificando se a FLAG_INTERRUPCAO esta ativa if flags & FLAG_INTERRUPCAO: print "FLAG_INTERRUPCAO: TRUE" else: print "FLAG_INTERRUPCAO: FALSE" # anexa outra flag flags |= FLAG_INTERRUPCAO # verificando se a FLAG_INTERRUPCAO esta ativa if flags & FLAG_INTERRUPCAO: print "FLAG_INTERRUPCAO: TRUE" else: print "FLAG_INTERRUPCAO: FALSE" # a FLAG_TEMPERATURA continua como esta: if flags & FLAG_TEMPERATURA: print "FLAG_TEMPERATURA: TRUE" else: print "FLAG_TEMPERATURA: FALSE" # volta-se ao estado inicial (false) flags &= ~FLAG_INTERRUPCAO # novo status da FLAG_INTERRUPÇãO if flags & FLAG_INTERRUPCAO: print "FLAG_INTERRUPCAO: TRUE" else: print "FLAG_INTERRUPCAO: FALSE"