简单的C语言位操作有关问题,

简单的C语言位操作问题,急急急急!
各位大神帮我看看怎么把一下数值重新组合为一个新的16进制数

DataB&0xc000 //取最高两位

DataE&0xa380 //取7、8、9、12、15位

DataB和DataE都是16bit的,我想把DataB的最高2位和DataE的第7、8、9、12、15位共7位重新组合为一个新的8bit的数值。(这6个放在0—6位置)。怎么做??

------解决方案--------------------
Assembly code

assign c[6:0]={DataE[15],DataE[12],DataE[9],DataE[8],DataE[7],DataB[1],DataB[0]};

------解决方案--------------------
多想想从 与 或 这方面着手吧
------解决方案--------------------
temp1 = DataB&0xc000 | DataE&0xa380
行不
------解决方案--------------------
第一位 temp = temp | ( DataB&0x40) >> 5
第二位 temp = temp | ( DataB&0x80) >> 6

....
------解决方案--------------------
可以参考下位域和union的用法
typedef union{
struct {
short bit0;
short bit1;
......
short bit15;
}bit;
short b16;
}DataB;