亚洲一级免费看,特黄特色大片免费观看播放器,777毛片,久久久久国产一区二区三区四区,欧美三级一区二区,国产精品一区二区久久久久,人人澡人人草

C語(yǔ)言

C語(yǔ)言位域的使用與注意事項(xiàng)解析

時(shí)間:2025-02-04 12:29:20 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

C語(yǔ)言位域的使用與注意事項(xiàng)解析

  C語(yǔ)言的位域是什么呢?該怎么使用呢?下面一起來(lái)看看C語(yǔ)言中位域的使用與注意事項(xiàng)解析吧!或許你就了解了。
  位域的定義
  有些信息在存儲(chǔ)時(shí),并不需要占用一個(gè)完整的字節(jié), 而只需占幾個(gè)或一個(gè)二進(jìn)制位。例如在存放一個(gè)開(kāi)關(guān)量時(shí),只有0和1 兩種狀態(tài), 用一位二進(jìn)位即可。為了節(jié)省存儲(chǔ)空間,并使處理簡(jiǎn)便,C語(yǔ)言又提供了一種數(shù)據(jù)結(jié)構(gòu),稱為“位域”或“位段”。所謂“位域”是把一個(gè)字節(jié)中的二進(jìn)位劃分為幾個(gè)不同的區(qū)域,并說(shuō)明每個(gè)區(qū)域的位數(shù)。每個(gè)域有一個(gè)域名,允許在程序中按域名進(jìn)行操作。 這樣就可以把幾 個(gè)不同的對(duì)象用一個(gè)字節(jié)的二進(jìn)制位域來(lái)表示。
  位域的定義和位域變量的說(shuō)明位域定義與結(jié)構(gòu)定義相仿,其形式為:
  ?
  struct 位域結(jié)構(gòu)名
  { 位域列表 };
  eg:struct weiyu {
  int a:2;
  int b:5;
  int  :5;//此五位為空域,不能使用
  int c:3;
  }
  位域雖然簡(jiǎn)單好用,但使用時(shí)需要注意:
  1) 如果相鄰位域字段的類型相同,且其位寬之和小于類型的sizeof大小,則后面的字段將緊鄰前一個(gè)字段存儲(chǔ),直到不能容納為止;2) 如果相鄰位域字段的類型相同,但其位寬之和大于類型的sizeof大小,則后面的字段將從新的存儲(chǔ)單元開(kāi)始,其偏移量為其類型大小的整數(shù)倍;3) 整個(gè)結(jié)構(gòu)體的總大小為最寬基本類型成員大小的整數(shù)倍。
  4) 如果相鄰的位域字段的類型不同,則各編譯器的具體實(shí)現(xiàn)有差異,VC6采取不壓縮方式,Dev-C++采取壓縮方式;5) 如果位域字段之間穿插著非位域字段,則不進(jìn)行壓縮;(不針對(duì)所有的編譯器)注意:4 ,5跟編譯器有較大的關(guān)系,使用時(shí)要慎重,盡量避免。
  ?
  #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 規(guī)則2struct testLen1{char a:5;char b:2;
  char d:3;
  char c:2;
  char e:7;
  }len1;
  printf("sizeof(len1) =%dn",sizeof(len1));  //3bytes 規(guī)則1struct testLen2{char a:2;char :3;
  char b:7;
  long d:20; //4bytes
  char e:4;
  }len2;
  printf("sizeof(len2)=%dn",sizeof(len2)); //12 規(guī)則3,4,5,總長(zhǎng)為4的整數(shù)倍,2+3 占1byte,b占1bye 由于與long對(duì)其,2+3+7 占4字節(jié),后面 d 與 e進(jìn)行了優(yōu)化 占一個(gè)4字節(jié)struct testLen3{char a:2;char :3;
  char b:7;
  long d:30;
  char e:4;
  }len3;
  printf("sizeof(len3)=%dn",sizeof(len3));//12 規(guī)則3,4,5,總長(zhǎng)為4的整數(shù)倍,2+3 占1byte,b占1bye 由于與long對(duì)其,2+3+7 占4字節(jié),后面 d占一個(gè)4字節(jié),為了保證與long對(duì)其e獨(dú)占一個(gè)4字節(jié)}
 

【C語(yǔ)言位域的使用與注意事項(xiàng)解析】相關(guān)文章:

C語(yǔ)言作用域入門(mén)學(xué)習(xí)05-21

C語(yǔ)言位操作是04-22

C語(yǔ)言位運(yùn)算05-08

C語(yǔ)言的位運(yùn)算05-31

c語(yǔ)言解析xml02-19

C語(yǔ)言題目及解析05-01

C語(yǔ)言的sizeo解析02-26

C語(yǔ)言的內(nèi)存使用03-06

C語(yǔ)言變量的使用03-30