C言語の構造体のビットフィールドに直接ビットを埋め込むことは可能ですか
初めて質問します。知識不足のせいか一部、一部おかしくな記述があるかもしれませんが、それを承知の上で質問に応えていただければ幸いです。
以下のような構造体があったとします。
struct Sample{
unsigned char var_a: 4;
unsigned char var_b: 1;
unsigned char var_c: 2;
unsigned char var_d: 1;
unsigned char var_e;
};
上記の構造体は(4bit,1bit,2bit,1bit)、(8bit)がメモリに確保されているため、合計2Byte確保されているはずです。
問題は以下のようなことをした際に、ビットフィールドにビットを直接代入できると思っていました。
unsigned short int var_1 = 0x0010;
struct Sample sample;
sample.var_a = var_1 & 0x00f0;
/* {0000 0000 0001 0000} & {0000 0000 1111 0000} = {0000 0000 0001 0000} */
0x0010と0x00f0の論理積なので答えは0x0010であり、0001の4ビットをsample.var_aに代入できると思っていました。({0000 0000 |0001| 0000}の||で囲んだ4ビットのこと)
printf("%x \n",sample.var_a);で出力すると、実際には0が代入されていました。
{0000 0000 00001 |0000|}の(0,1,2,3)bitの0000を代入していたと後から気づいたのですが、これを(4,5,6,7)bitの0001をsample.var_aに代入することはできないのでしょうか。
追記:
一部、誤字があったので修正です。
struct Sample hoge;
ではなく、
struct Sample sample;
でした。
書いていた途中で変えてしまっていました。わかりにくいようにしてしまい大変失礼いたしました。