Char jako tablica 8 booli
Krecik
Poniższy kod pokazuje możliwość wykorzystania char jako tablicy ośmio bitowej. Trzeba tylko pamiętać, że get zwraca bity w 'odwrotnej' kolejności (przynajmniej w stosunku do tej, do której ja przywykłem, ale łatwo to zmienić, a mi akurat tak było wygodniej :) ), czyli mniej~więcej tak:
pozycja:| 0 | 1| 2| 3| 4| 5| 6| 7|
--------+---+--+--+--+--+--+--+--+
wartość:|128|64|32|16| 8| 4| 2| 1|
bool get(char a, int pos)
{
char bit = 1;
for(register int i=pos; i>0; i--)bit*=2;//potęga :)
return (a&bit);
}
//--------------------
void set(char &a, int &pos, bool &stan)
{
char bit = 1;
for(register int i=pos; i>0; i--)bit*=2;//potęgowanie :)
if(stan==0)
a&=(~bit);
else
a|=bit;
}
Myślę, że set() można by było poprawić, przez zlikwidowanie tego if`a, ale ja jakoś zupełnie nie mam pomysłu jak...
PS> to moje początki z arytmetyką logiczną, więc się nie śmiać :)
Albo tak:
Właściwie to samo, ale jednak czysta arytmetyka, bez sprawdzania warunków.
Nie wiem, dlaczego odwróciłeś numery bitów - zwyczajowo bit nr 0 jest najmniej znaczącym - a więc o wartości 1, a nie jak u Ciebie 128.
Moje wersje tych funkcji (przyjmując standarwową kolejność bitów: 0=1, ..., 7=128):
Czyż nie prościej?