Проблема объединения и структурирования

Я пишу программное обеспечение, в котором каждый бит должен быть точным (это для процессора), поэтому __packed очень важен.

typedef union{
uint32_t raw;
struct{
    unsigned int present:1;
    unsigned int rw:1;
    unsigned int user:1;
    unsigned int dirty:1;
    unsigned int free:7;
    unsigned int frame:20;
} __packed;
}__packed page_union_t;

это моя структура и союз. Это не работает однако:

page_union_t p; //.....
//This:
p.frame=trg_page;
p.user=user;
p.rw=rw;
p.present=present;
//and this:
p.raw=trg_page<<12 | user<<2 | rw<<1 | present;

должен создать такой же uint32. Но они не создают одно и то же.

Есть ли что-то, чего я не вижу, что не так с моим союзом?

Ответы на вопрос(4)

Ваш ответ на вопрос