- 论坛徽章:
- 0
|
原帖由 skyguide 于 2009-10-9 22:44 发表 ![]()
那下面这个程序输出什么呢
unsigned char puc[4];
struct tag
{
unsigned char ucP;
unsigned char ucD0:1;
unsigned char ucD1:2;
unsigned char ucD2:3;
}*pst;
int main()
{
pst=(struct tag*)puc;
memset(puc,0,4);
pst->ucP=1;
pst->ucD0=2; // ucD0就一位, 即只能赋值0或1,你赋值2编译器应该报错的吧~~
pst->ucD1=3; // 3 == 11
pst->ucD2=4; // 4 == 100
printf("%02x,%02x,%02x,%02x\n",puc[0],puc[1],puc[2],puc[3]);
return 0;
}
假如
pst->ucD0=1; // 1
pst->ucD1=3; //11
pst->ucD2=4; //100
依次把各位填充,第2个字节:[b7][b6][b5][b4][b3][b2][b1][b0]
ucD0填充b0, ucD1填充b1,b2,ucD2填充b3,b4,b5 --> [0][0] [1][0][0][1][1][1]
那该字节即 00100111对应的%02x就是27 |
|