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
字符