明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

C程式中對于整數(shù)儲存的說明

[摘要]write by polaris(lz0ace@hotmail.com)轉(zhuǎn)載請注明作者 首先感謝玲對我的支持,在我最困難時是她幫助了我。聲明一下,高手就不要看了,這篇文章只是隨便寫寫,解決一些C編程新手的問題。廢話少說先看程序:------------------------------start...
write by polaris(lz0ace@hotmail.com)

轉(zhuǎn)載請注明作者

首先感謝玲對我的支持,在我最困難時是她幫助了我。聲明一下,高手就不要看了,這篇文章只是隨便寫寫,解決一些C編程新手的問題。
廢話少說先看程序:
------------------------------start------------------------------------------
struct bit
{
unsigned a_bit:2;//為bit結(jié)構(gòu)體中的a_bit成員分配兩字節(jié)的空間
unsigned b_bit:2;//為bit結(jié)構(gòu)體中的b_bit成員分配兩字節(jié)的空間
unsigned c_bit:1;//為bit結(jié)構(gòu)體中的c_bit成員分配兩字節(jié)的空間
unsigned d_bit:1;//為bit結(jié)構(gòu)體中的d_bit成員分配兩字節(jié)的空間
unsigned e_bit:2;//為bit結(jié)構(gòu)體中的e_bit成員分配兩字節(jié)的空間
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后在內(nèi)存中的儲存為二進制10010110,注意這里是unsigned形式,沒有符號位。之后P指針被賦moduword的地址。由于P指針指向的空間是bit型,所以打印p->a_bit是既為modword的第一個兩字節(jié)空間的值。按常理b_bit所占區(qū)域的值應(yīng)該是二進制01,但是打印b_bit時輸出的竟然2。我暈。!
情急之下我又試了95輸出為1,1,1,,0,2再看97,輸出3,1,1,0,2。漸漸明白了,原來在C編譯器中以整形變量的右端作為低地址的。
本文遇到的問題可能新手們會再次遇到,希望可以作為參考。