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"