2008-07-08 [長年日記]

_ [cat] あまえんぼミナミ

ニャムニャム

あまえられる時はうんとあまえておきましょう。

これは、人の世界も猫の世界も同じことみたいですね。

_ [Programming][C] ビットフィールド備忘録

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:0
r2.a= (num & HOGE_FLAG)? 1 : 0; と書いて解決できます。
[]

«前の日記(2008-06-30) 最新