Witam. Muszę napisać zbiór, przy użyciu operacji bitowych, np. funkcja dodawania i odejmowania nowego elementu powinna wyglądać tak:

 
   char tab[size];

   void add(T elem) {
        int pos = elem / 8;
        T mask = 1 << (elem % 8);
        tab[pos] = tab[pos] | mask;
        size++;
    }
    
    void del(T elem) {
        int pos = elem / 8;
        T mask = 1 << (elem % 8);
        tab[pos] = tab[pos] & ~mask;
        size--;
    }

Problemy są takie, że linia tab[pos] = tab[pos] | mask niczego nie przypisuje do tab[pos], ale jezeli bedzie to tablica int to ok (kazano mi użyć char). Drugi problem jest taki, że nie widzę tutaj w ogóle sensu, przesuwam jedynkę w lewo o pare miejsc i co mi to daje? Jak z powrotem odczytać moją wartość? Może jest to całkiem zła droga? Prosze o pomoc.