未明白问题


1.
ide

typedef struct AA{
 int b1 : 5;
 int b2 : 2;
}AA;ci

void main()
{
 AA aa;
 printf("%d/n", 'A');
 char cc[100];
 strcpy(cc,"0123456789abcdefghijklmnopqrstuvwxyz");
 memcpy(&aa,cc,sizeof(AA));//将sizeof(AA)个连续的字节空间(从cc开始),源和目的地不能重叠
 printf("%d %d/n", aa.b1, aa.b2);it

}class

  首先sizeof(AA)的大小为4,b1和b2分别占5bit和2bit.通过strcpy和memcpy后,aa的4个字节所存放的值是: 0,1,2,3的ASC码,即00110000,00110001,00110010,00110011因此,最后一步:显示的是这4个字节的前5位,和 以后的2位分别为:10000,和01,由于int是有正负之分di


分析view

首先sizeof(AA)的大小为4,是由于int 类型占4个字节,b1 b2由于字节对齐的缘由,就占用了4个字节的第1个字节的5bit和2bit。vi

而后就是aa的4个字节存放的是字符 ‘0’‘1’‘2’‘3’的ascill.即00110000,00110001,00110010,00110011co

最后就是-16的问题,由于aa.b1 是10000 为补码,因此其原码就是补码取反+1
字符