Czy zerowa inicjalizacja struktur gwarantujących wycieranie obszarów wypełnionych?

Załóżmy, że mam następującą strukturę:

typedef struct
{
    unsigned field1 :1;
    unsigned field2 :1;
    unsigned field3 :1;
} mytype;

Pierwsze 3 bity będą użyteczne, alesizeof(mytype) wróci4 co oznacza 29 bitów wypełnienia. Moje pytanie brzmi, czy te bity dopełnienia są gwarantowane przez standard inicjowany przez zero:

mytype testfields = {0};

lub:

mytype myfields = {1, 1, 1};

Takie, że można bezpiecznie wykonać następujące czynnościmemcmp() przy założeniu, że bity 4..29 będą równe zero, a zatem nie będą miały wpływu na porównanie:

if ( memcmp(&myfields, &testfields, sizeof(myfields)) == 0 )
    printf("Fields have no bits set\n");
else
    printf("Fields have bits set\n");

questionAnswers(3)

yourAnswerToTheQuestion