Pytania o pola bitowe C

Czy bitfield jest pojęciem C lub C ++?

Czy można go używać tylko w strukturze? Jakie inne miejsca możemy z nich korzystać?

AFAIK, pola bitowe są specjalnymi zmiennymi struktury, które zajmują pamięć tylko dla określonego nie. bitów. Jest to przydatne w oszczędzaniu pamięci i niczego więcej.Mam rację?

Kodowałem mały program, aby zrozumieć użycie bitfieldów - ale myślę, że nie działa zgodnie z oczekiwaniami. Oczekuję, że rozmiar poniższej struktury będzie wynosił 1 + 4 + 2 = 7 bajtów (biorąc pod uwagę rozmiar niepodpisanego int ma 4 bajty na moim komputerze), ale ku mojemu zdziwieniu okazuje się, że jest to 12 bajtów (4 + 4 + 4 ).Czy ktoś może mi powiedzieć dlaczego?

#include <stdio.h>

struct s{
unsigned int a:1;
unsigned int b;
unsigned int c:2;
};

int main()
{
  printf("sizeof struct s = %d bytes \n",sizeof(struct s));
  return 0;
}

WYDAJNOŚĆ:

sizeof struct s = 12 bytes 

questionAnswers(5)

yourAnswerToTheQuestion