#include <iostream>
#define REP(k,a) for(int k=0; k < (a); ++k)
struct ConjuntoBits
{
private:
int bits;
public:
ConjuntoBits()
{
bits = 0;
}
bool Contiene(int item)
{
return (bits & (1 << item)) != 0;
}
void Agregar(int item)
{
bits=(bits | (1 << item));
}
void Remover(int item)
{
bits=(bits & ~(1 << item));
}
void Mostrar()
{
REP(item,32)
if (Contiene(item))
std::cout << item << " ";
std::cout << std::endl;
}
int Cantidad()
{
int restante = bits;
int Cantidad = 0;
while (restante != 0)
{
restante &= (restante - 1);
Cantidad++;
}
return Cantidad;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
ConjuntoBits algo;
REP(i,5)
algo.Agregar(i*5);
if(algo.Contiene(5))
std::cout << "si" << std::endl;
else
std::cout << "no" << std::endl;
algo.Mostrar();
std::cout << algo.Cantidad() << std::endl;
algo.Remover(5);
if(algo.Contiene(5))
std::cout << "si" << std::endl;
else
std::cout << "no" << std::endl;
algo.Mostrar();
std::cout << algo.Cantidad() << std::endl;
std::cin.get();
return 0;
}