初めて質問します。知識不足のせいか一部、一部おかしくな記述があるかもしれませんが、それを承知の上で質問に応えていただければ幸いです。

以下のような構造体があったとします。

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;

でした。

書いていた途中で変えてしまっていました。わかりにくいようにしてしまい大変失礼いたしました。