bit field
- Bit Fieldを共用体メンバと利用する実験をしてみた。
#include <stdio.h> typedef unsigned short __u16; typedef struct{ __u16 d0:8, d1:4, d2:2, d3:1, d4:1; } bits_t; typedef union{ bits_t bits; __u16 all; } bf_t; typedef union{ __u16 d0:8, d1:4, d2:2, d3:1, d4:1; __u16 all; } bf_t2; typedef union{ __u16 d0:8, d1:4; __u16 d2:2, d3:1, d4:1; __u16 all; } bf_t3; main (){ bf_t bf; bf_t2 bf2; bf_t3 bf3; bf.bits.d0=1; bf.bits.d1=2; bf.bits.d2=3; bf.bits.d3=1; printf("bf.all=%x\n", bf.all); bf2.d0=1; bf2.d1=2; bf2.d2=3; bf2.d3=1; printf("bf2.all=%x\n", bf2.all); bf3.d0=1; bf3.d1=2; bf3.d2=3; bf3.d3=1; printf("bf3.all=%x\n", bf3.all); }
- 結果
bf.all=7201
bf2.all=8503
bf3.all=3
bfのみが期待通りの結果。
やはり、共用体として利用するには、bit field部分だけ別の構造体に
しないとうまくいかないようだ。
bf3は、行毎にメンバが作られたように見えるが、
bf2は、どういう動きでこのような結果になるのかは不明。
uname -a Linux dell2 2.6.11-1.1369_FC4 #1 Thu Jun 2 22:55:56 EDT 2005 i686 i686 i386 GNU/Linux