日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

结构体位域及联合体解析

發布時間:2024/4/13 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 结构体位域及联合体解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于敘述不及代碼演示,直接上代碼;后面敘述下優缺點;

//結構體位域及聯合體解析 //sizeof(s1)等于3。因為一個位域字段必須存儲在其位域類型的一個單元所占空間中,不能橫跨兩個該位域類型的單元。 struct st1 {unsigned char a : 7; /*字段a占用了一個字節的7個bit*/unsigned char b : 2; /*字段b占用了2個bit*/unsigned char c : 7; /*字段c占用了7個bit*/ }s1;//sizeof(s2)等于2。因為a b 位域正好占用一個字節 8bit。因此一共占用兩個字節 struct st2 {unsigned char a : 7; /*字段a占用了一個字節的7個bit*/unsigned char b : 1; /*字段b占用了2個bit*/unsigned char c : 7; /*字段c占用了7個bit*/ }s2;//聯合體和結構體位域聯用 union union_st3 {struct st2 X;unsigned short all; //兩個字節,16bit }union_t3;int main(void) {s1.a = 15;s1.b = 3; //注意賦值不要超限,像s1.b占用2bit 取值范圍:0-3;不然編譯可能會報錯s1.c = 0;printf("sizeof s1.b = %d\r\n",s1.b);union_t3.all = 0xffff;printf("sizeof s1.all = %d\r\n",union_t3.all);printf("sizeof union_t3.X.a = %d\r\n",union_t3.X.a);printf("sizeof union_t3.X.b = %d\r\n",union_t3.X.b);printf("sizeof union_t3.X.c = %d\r\n",union_t3.X.c);union_t3.all = 0x0f87;//0[000 1111] [1][000 0111] c:15 b:1 a:7printf("sizeof s1.all = %d\r\n",union_t3.all);printf("sizeof union_t3.X.a = %d\r\n",union_t3.X.a);printf("sizeof union_t3.X.b = %d\r\n",union_t3.X.b);printf("sizeof union_t3.X.c = %d\r\n",union_t3.X.c);printf("sizeof s1 = %d\r\n",sizeof(struct st1));printf("sizeof s2 = %d\r\n",sizeof(struct st2)); } //執行結果:自己對照下打印順序sizeof s1.b = 3 sizeof s1.all = 65535 sizeof union_t3.X.a = 127 sizeof union_t3.X.b = 1 sizeof union_t3.X.c = 127 sizeof s1.all = 3975 sizeof union_t3.X.a = 7 sizeof union_t3.X.b = 1 sizeof union_t3.X.c = 15 sizeof s1 = 3 sizeof s2 = 2
  • 優點:可以把一個變量拆分成位域,省時省空間,再結合聯合體,完美;
  • 缺點:不同系統對位域的處理可能有不同的結果,如位段成員在內存中是從左向右分配的還是從右向左分配的,所以位域的使用不利于程序的可移植性。

總結

以上是生活随笔為你收集整理的结构体位域及联合体解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。