Ułożenie danych w polach bitowych

0

Czy moge oczekiwać, że taka unia

union
{
   struct
   {
      unsigned b1 : 1;
      unsigned b2 : 1;
      unsigned b3 : 1;
      unsigned b4 : 1;
      unsigned b5 : 1;
      unsigned b6 : 1;
      unsigned b7 : 1;
      unsigned b8 : 1;
   };
   unsigned char bits;
};

będzie się zachowywać tak samo na każdym kompilatorze, tj. każda z wartości b1..b8 będzie odpowiadać kolejnemu bitowi bits w określonej kolejności ? Czy standard to gwarantuje ?

0

Nie, najpierw to byś musiał mieć pewność, że bajt ma 8 bitów, a to pewne nie jest. Ale kolejność powinna być taka sama... Chociaż zawsze jest endian. A tak ogólnie to struktury bez nazwy i bez tworzenia obiektu zdaje się są niedozwolone (chyba, nie jestem pewien), więc co tu się pytać o działanie czegoś, co się nie kompiluje?

0

tak mozesz miec pewnosc, nawet jak bajt ma wiecej niz 8 bitow, bo w uni bity beda liczone od lsb, a endian nie ma nic do rzeczy bo to kolejnosc bajtow a nie bitow :p

0

A tak ogólnie to struktury bez nazwy i bez tworzenia obiektu zdaje się są niedozwolone
Czy dozwolony czy nie, nie ważne, i tak by sensu nie miało, chciałem tylko pokazać układ.

Chciałem mieć pewność czy b1 to będzie pierwszy bajt tej struktury, a b8 ósmy. Czy kompilator może sobie to jakoś inaczej ułożyć.

Jednak okazało się że i tak dupa z pola bitowego, bo będę potrzebować adresy b1..b8, więc każdy musi mieć po bajcie.

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