Mscaras de bits
July 23, 2009
[Warning: This post is a backup recovery from my previous Wordpress blog. All content was automatically converted accessing a MySQL database using a Python script (details). Mostly are in Portuguese but if you are interest I can translate to English. If you found any problem dont’t hesitate to contact me in comments.]
Este um pequeno resumo para utilizar mscara-de-bits quando voc precisar armazenar flags booleanas em uma nica varivel inteira.Abaixo esto 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 potncias de 2.
1) Para verificar o valor utilize a lgica AND:
if (flags & FLAG_TEMPERATURA) {
/* ... */
}
2) Para setar em TRUE o valor, utilize a lgica OR:
flags |= FLAG_ALARME_1;
3) Para setar em FALSE o valor, utilize a lgica 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_INTERRUPO
if flags & FLAG_INTERRUPCAO:
print "FLAG_INTERRUPCAO: TRUE"
else:
print "FLAG_INTERRUPCAO: FALSE"