未明白問題


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

相關文章
相關標籤/搜索