a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

詳解C語言位域的使用與注意事項

2020-01-26 14:21:28
字體:
來源:轉載
供稿:網友

位域的定義

有些信息在存儲時,并不需要占用一個完整的字節, 而只需占幾個或一個二進制位。例如在存放一個開關量時,只有0和1 兩種狀態, 用一位二進位即可。為了節省存儲空間,并使處理簡便,C語言又提供了一種數據結構,稱為“位域”或“位段”。所謂“位域”是把一個字節中的二進位劃分為幾個不同的區域,并說明每個區域的位數。每個域有一個域名,允許在程序中按域名進行操作。 這樣就可以把幾 個不同的對象用一個字節的二進制位域來表示。

位域的定義和位域變量的說明位域定義與結構定義相仿,其形式為:

struct 位域結構名  { 位域列表 };eg:struct weiyu {         int a:2;         int b:5;         int  :5;//此五位為空域,不能使用             int c:3;          }

位域雖然簡單好用,但使用時需要注意:

     1) 如果相鄰位域字段的類型相同,且其位寬之和小于類型的sizeof大小,則后面的字段將緊鄰前一個字段存儲,直到不能容納為止;

     2) 如果相鄰位域字段的類型相同,但其位寬之和大于類型的sizeof大小,則后面的字段將從新的存儲單元開始,其偏移量為其類型大小的整數倍;

     3) 整個結構體的總大小為最寬基本類型成員大小的整數倍。

     4) 如果相鄰的位域字段的類型不同,則各編譯器的具體實現有差異,VC6采取不壓縮方式,Dev-C++采取壓縮方式;

     5) 如果位域字段之間穿插著非位域字段,則不進行壓縮;(不針對所有的編譯器)

注意:4 ,5跟編譯器有較大的關系,使用時要慎重,盡量避免。

#include "stdio.h"void main(int argn ,char *argv){  struct   test {    unsigned a:10;    unsigned b:10;    unsigned c:6;    unsigned :2;//this two bytes can't use    unsigned d:4;    }data,*pData;  data.a=0x177;  data.b=0x111;  data.c=0x7;  data.d=0x8;    pData=&data;  printf("data.a=%x data.b= %x data.c=%x data.d=%xn",pData->a,pData->b,pData->c,pData->d);//位域可以使用指針  printf("sizeof(data)=%dn",sizeof(data));  //4 bytes ,最常用的情況  struct testLen{  char a:5;  char b:5;  char c:5;  char d:5;  char e:5;  }len;    printf("sizeof(len)=%dn",sizeof(len));   //5bytes 規則2  struct testLen1{    char a:5;    char b:2;    char d:3;    char c:2;    char e:7;    }len1;  printf("sizeof(len1) =%dn",sizeof(len1));  //3bytes 規則1  struct testLen2{    char a:2;    char :3;    char b:7;    long d:20; //4bytes    char e:4;    }len2;  printf("sizeof(len2)=%dn",sizeof(len2)); //12 規則3,4,5,總長為4的整數倍,2+3 占1byte,b占1bye 由于與long對其,2+3+7 占4字節,后面 d 與 e進行了優化 占一個4字節  struct testLen3{    char a:2;    char :3;    char b:7;    long d:30;    char e:4;    }len3;  printf("sizeof(len3)=%dn",sizeof(len3));//12 規則3,4,5,總長為4的整數倍,2+3 占1byte,b占1bye 由于與long對其,2+3+7 占4字節,后面 d占一個4字節,為了保證與long對其e獨占一個4字節}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家學習或者使用C語言能帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 国产一区二区三区四区在线观看 | 国产亲子乱弄免费视频 | 免费在线黄色av | 成人午夜视频在线观看 | 国产一级一级毛片女人精品 | 欧美日韩成人影院 | 在线中文字幕av | 看毛片的网站 | 国产精彩视频 | 一区在线视频 | 青青综合网 | 成人av影视在线观看 | 欧美久久视频 | 精品久久久久久久久久久 | 久久午夜电影院 | 成人免费看黄 | 一区二区在线 | 久久高清毛片 | 热久久这里只有精品 | 成人免费精品 | 国产精品一区在线观看 | 日韩精品视频在线观看网站 | 国产成人精品免高潮在线观看 | 精品视频一区二区在线 | 久久69精品久久久久久久电影好 | a一级毛片 | 欧美一级二级视频 | 国产精品久久久久9999鸭 | 色88久久久久高潮综合影院 | 伊人av在线 | 国产精品高清在线 | 日韩1区2区3区 | 国产精品一区一区三区 | 中文字幕二三区不卡 | 欧美一区二区高清 | 国产精品久久久久久久久久妞妞 | 91中文在线观看 | 久久久久久久99精品免费观看 | 亚洲日日 | 久久久一区二区 | 久久精品国产99国产 |