write by polaris(lz0ace@hotmail.com)
轉載請注明作者
首先感謝玲對我的支持,在我最困難時是她幫助了我。聲明一下,高手就不要看了,這篇文章只是隨便寫寫,解決一些C編程新手的問題。 廢話少說先看程序: ------------------------------start------------------------------------------ struct bit { unsigned a_bit:2;//為bit結構體中的a_bit成員分配兩字節的空間 unsigned b_bit:2;//為bit結構體中的b_bit成員分配兩字節的空間 unsigned c_bit:1;//為bit結構體中的c_bit成員分配兩字節的空間 unsigned d_bit:1;//為bit結構體中的d_bit成員分配兩字節的空間 unsigned e_bit:2;//為bit結構體中的e_bit成員分配兩字節的空間 unsigned word:8; } main() { struct bit * p; unsigned int modword; printf("enter..\n"); scanf("%x",&modword); p=(struct bit * )&modword; printf("a_bit:%d\n",p->a_bit); printf("b_bit:%d\n",p->b_bit); printf("c_bit:%d\n",p->c_bit); printf("d_bit:%d\n",p->d_bit); printf("e_bit:%d\n",p->e_bit); } ------------------------------end--------------------------------------------- 運行程序,輸入96答案是 a_bit:2 b_bit:1 c_bit:1 d_bit:0 e_bit:2 scanf接收十六進制的96后在內存中的儲存為二進制10010110,注意這里是unsigned形式,沒有符號位。之后P指針被賦moduword的地址。由于P指針指向的空間是bit型,所以打印p->a_bit是既為modword的第一個兩字節空間的值。按常理b_bit所占區域的值應該是二進制01,但是打印b_bit時輸出的竟然2。我暈!!! 情急之下我又試了95輸出為1,1,1,,0,2再看97,輸出3,1,1,0,2。漸漸明白了,原來在C編譯器中以整形變量的右端作為低地址的。 本文遇到的問題可能新手們會再次遇到,希望可以作為參考。
|