Korzystanie z poszczególnych bitów zmiennej

0

Cześć,
mam pytanie czy w C++ da się zapisywać wartości do odpowiednich bitów danej zmiennej, w ten sposób, że liczbę int zajmującą np. 4 bajny możnaby potraktować jako wektor przechowujący 4x8 zmiennych typu bool?
Chodzi mi o utworzenie klasy, która będzie mogła przechowywać tablicę zmiennych typu bool upakowanych w liczbie typu int.

Reasumując chodzi mi mniej więcej o coś takiego:

class BoolVector
	{
	BoolVector(){wsk = nullptr;}
	int* wsk; //tablica zmiennych int
	void set_array_size(bool* bool_variables, int size)
		{
		if(wsk)
			delete[] wsk;
		wsk = new int[size/sizeof(int)+1];
		for(int i=0; i<size; i++)
			for(int j=0; j<sizeof(int); j++)
				wsk[i] = ... //TU NALEŻY JAKOŚ ZAPISA zmienne typu bool
		}
	bool get_bool(int i)
		{
		int help_var = 0;
		help_var = wsk[i/sizeof(int)]
		
		return ...	//co/jak zwrócić...
		}
};
0

Przecież typ bool zajmuje 1 bajt, nie 1 bit.

1
unsigned char i;

kolejność bitów: 76543210

zapis jedynki do bitu nr 3:

i |= 1 << 3;

wyzerowanie bitu nr 3:

i &= ~(1<<3);

sprawdzenie bitu nr 3:

if (i & (1<<3))
0
vector<bool>
  • tak robi.
unsigned char *Bits=new unsigned char[(Size+7)>>3];
void SetBit(unsigned p) { Bits[p>>3]|=(1<<(p&7)); }
0

@Azarien dokładnie o to mi chodziło! dziękuję!
Dzięki również Tobie @_13th_Dragon - ciekawa informacja ;-)
@Hrypa W moim kodzie zapomniałem dodatkowo dodać pętli odnośnie każdego bitu - chodziło właśnie o to, by zmienna bool była zapisana na bicie a nie bajcie ;-)

Mam jeszcze jedno pytanie: czy jest jakaś możliwość sprawdzenia ile bitów ma bajt? Bo podobno nie zawsze musi być to 8 bitów?
pozdrawiam

0
_13th_Dragon napisał(a):
vector<bool>
  • tak robi.

Czy w nowym standardzie nie miało to być usunięte?

0
Ołeh napisał(a):
_13th_Dragon napisał(a):
vector<bool>
  • tak robi.

Czy w nowym standardzie nie miało to być usunięte?

Idea std::vector<bool> w C++11 nie uległa zmianom, został on jedynie dopasowany do nowego standardu jak inne rzeczy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1