1bit のメンバー変数に正の数を代入すると丸め込んでいると思い込んでいました。
が、その考えは間違いでして、 1bit フィールドには 1 or 0 しか入れちゃダメみたいです。
以下、 HOGE_FLAG(0x8) のマスクを取ってフラグがたっているか確認を行うソースコードです。
r2.a には 0x08 が代入されるので、 丸め込まれて r2.a は 1 になるのかなと思っていたのですが、実際には 0 が入っていました。
#define HOGE_FLAG 0x8 int main(void) { int r; struct { unsigned int a:1; } r2; int num = 0x0e; r = num & HOGE_FLAG; r2.a = num & HOGE_FLAG; printf("r:%d r2.a:%d\n", r, r2.a); return 0; } 結果 r:8 r2.a:0r2.a= (num & HOGE_FLAG)? 1 : 0; と書いて解決できます。