>>453
上位12〜15bitと上位2byteは領域がかぶっているから共用体も使った
typedef struct st_hoge{

unsigned zero :8;
unsigned set :8;
union {
struct {
unsigned n4Bits : 4;
unsigned n12Bits : 12;
}foo;
unsigned short s;
}n16;
}ST_HOGE;

void Func(int *pValue)
{
ST_HOGE *p = (ST_HOGE *)pValue;
if( p->n16.foo.n4Bits ==0 )
{
p->n16.s = 1;
}
else
{
p->n16.s = 2;
}
}

あと上位12〜15bitってことは
int nValue = 0xfff0ffff;
ではないかい?