podobno w takim przypadku:
to może sprawdzimy???
#include <iostream>
#include <string>
using namespace std;
struct moja {
unsigned int a:4;
};
int main()
{
moja x;
x.a = 15;
cout<<x.a<<endl;
x.a = 16;
cout<<x.a<<endl;
}
u mnie ten program działa poprawnie dla 15 a wali się dla 16 (możesz powpisywać inne wartości), co jest znakiem że 15 jest maksymalną liczbą jaką można tam wpisać. To, z czym ci się mogło pomylić to fakt, że w przypadku int jeden bit idzie na znak, ale tu mamy unsigned int czyli znak nie jest przechowywany. Tak nawiasem mówiąc zauważ, że ten program dla liczb z przedziału [0;15] działa dobrze, a dla większych liczb dzieje się ciekawa rzecz, mianowicie mamy:
dla 16 wypisuje 0 (=16 - 16)
dla 19 wypisuje 3 (= 19 - 16)
...
bo rzeczywiście zmienna a przechowuje 4 bity, ale jak do niej wpiszesz coś większego to nie będzie tam błędu, będzie tylko ostrzeżenie, ponieważ reszta bitów w przypadku większej liczby nie zostanie po prostu zapisana (czyli dla 19 (10) = 10011 (2) zostanie zapisany tylko kawałek 0011 (2) = 3 (10)). Jak chcesz to sam możesz sprawdzić co dzieje się dla liczb większych od 7 gdy mamy int a nie unsigned int)