是這樣的,這裡是關於結構體位域的問題。定義了三個型別為unsigned的位域名a,b,c,長度分別是2bit,3bit,4bit。然後 data.a =
1; data.b =
2; data.c =
3;這裡給它們分別賦值。在32-bit系統下,unsigned是佔4個位元組,共32位。a佔2位,1賦值給它,就是0000 0000 0000 0000 0000 0000 0000 0001b佔3位,2賦值給它,就是0000 0000 0000 0000 0000 0000 0000 1001c佔4位,3賦值給它,就是0000 0000 0000 0000 0000 0000 0110 1001而data.i=0;因為i是int型,佔4個位元組,是上面說的4個位元組後的下一個4位元組。賦值為0.最後看printf("%d\n", data); 這句是列印data的首地址值,即結構體unsigned型別為域對應的4個位元組的值。所以根據上面解釋的 ,現在就很明顯了。值就是3個為域分別賦值之後的最終值,即:0000 0000 0000 0000 0000 0000 0110 1001轉16進位制就是:0x00000069 即0x69。 十進位制就是105.希望對你有幫助。
是這樣的,這裡是關於結構體位域的問題。定義了三個型別為unsigned的位域名a,b,c,長度分別是2bit,3bit,4bit。然後 data.a =
1; data.b =
2; data.c =
3;這裡給它們分別賦值。在32-bit系統下,unsigned是佔4個位元組,共32位。a佔2位,1賦值給它,就是0000 0000 0000 0000 0000 0000 0000 0001b佔3位,2賦值給它,就是0000 0000 0000 0000 0000 0000 0000 1001c佔4位,3賦值給它,就是0000 0000 0000 0000 0000 0000 0110 1001而data.i=0;因為i是int型,佔4個位元組,是上面說的4個位元組後的下一個4位元組。賦值為0.最後看printf("%d\n", data); 這句是列印data的首地址值,即結構體unsigned型別為域對應的4個位元組的值。所以根據上面解釋的 ,現在就很明顯了。值就是3個為域分別賦值之後的最終值,即:0000 0000 0000 0000 0000 0000 0110 1001轉16進位制就是:0x00000069 即0x69。 十進位制就是105.希望對你有幫助。