Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pole bitowe

Ostatnio zmodyfikowano 2013-01-21 12:27
Autor Wiadomość
starter
Temat założony przez niniejszego użytkownika
Pole bitowe
» 2013-01-21 08:18:09
Witam,
znalazłem w internecie artykuł o polu bitowym w C++. Bardzo przydałaby mi się ta funkcja, gdyż potrzebuje zmiennej o rozmiarze 1 bita, a chyba nie ma takiej wbudowanej w język? A więc pole bitowe miało by wyglądać tak
unsigned short zmienna: 3;
. Taki zapis powodował by, że zmienna mogłaby przechowywać tylko 3 bity. Niestety kompilacja się nie powodzi.
Używam CodeBlocks 10.05.
Dzięki za pomoc :)
P-74549
jsc
» 2013-01-21 08:35:05
To ma większość shorta, z czego wykorzystujesz tylko 3 bity, po za tym zapomniałeś ;.
P-74551
starter
Temat założony przez niniejszego użytkownika
» 2013-01-21 08:38:25
już poprawione
i tak nie działa
//edit:
wyskakuje
error:expected initializer before ':' token
//down:
W logu jest tylko to co podałem dwa wiersze wyżej
P-74552
m4tx
» 2013-01-21 08:39:51
@starter to, co robisz, nie ma sensu. Twoja zmienna i tak będzie zajmować minimum 1 bajt w pamięci. Jak chcesz mieć zmienną o rozmiarze 1 bita to możesz np. umieścić sobie 8 booli w jednym bajcie (niestety jednak, na chwilę obecną nie pamiętam już, jak to się robi).
I tak btw., zamiast mówić "kompilacja się nie powodzi" podaj log kompilacji :)
P-74553
krzyk
» 2013-01-21 08:49:20
dajesz to w class lub struct,bo chyba tylko tam można takiej konstrukcji użyć.
P-74555
kubawal
» 2013-01-21 11:01:24
Robi sie to tak (przykładowo):
C/C++
struct PrinterState
{
    unsigned int IsPaper: 1;
    unsigned int IsColor: 1;
    unsigned int IsBlack: 1;
    unsigned int IsBusy: 1;
    unsigned int IsBroken: 1;
    unsigned int CanPrint: 1;
    unsigned int: 26; // po to, żeby cała struktura była rozmiaru słowa (na komputerach 32-bitowych); nie trzeba używać nazwy
};
//...

PrinterState ps = GetPrinterState( device );
if( ps.IsBroken == true ) // można używać normalnie jak zwykłą klasę
{
    cout << "Drukarka się zepsuła!";
}
P-74564
pekfos
» 2013-01-21 12:18:52
starter: Czyżbyś nie miał podstawowej wiedzy w zakresie informatyki? Najmniejszą adresowalną jednostką pamięci jest bajt, więc istnienie 3-bitowego typu jest po prostu niemożliwe.
Pola bitowe służą do efektywnego pakowania składowych w złożonych typach. Dzięki temu można zmniejszyć rozmiar struktury kosztem szybkości dostępu do składowych.
P-74570
DejaVu
» 2013-01-21 12:27:15
kosztem szybkości dostępu do składowych
Tej szybkości bym tak nie podkreślał bo poświęcenie jednego lub dwóch cykli na wyłuskanie jednej informacji może być szybsze aniżeli kilkukrotny odczyt danych z 'różnych' adresów pamięci.
P-74571
« 1 »
  Strona 1 z 1