一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C語言位域的使用及其注意點(diǎn)

 WUCANADA 2013-06-02
C語言位域的使用及其注意點(diǎn) 2013-03-08 17:33:08

分類: C/C++

原文地址:C語言位域的使用及其注意點(diǎn) 作者:庖丁解犇

所謂“位域”是把一個字節(jié)中的二進(jìn)位劃分為幾個不同的區(qū)域, 并說明每個區(qū)域的位數(shù)。每個域有一個域名,允許在程序中按域名進(jìn)行操作。 這樣就可以把幾個不同的對象用一個字節(jié)的二進(jìn)制位域來表示。位域的定義和位域變量的說明位域定義與結(jié)構(gòu)定義相仿,其形式為:
struct 位域結(jié)構(gòu)名 
  { 位域列表 };
eg:struct weiyu {
                  int a:2; 
                  int b:5;
                  int   :5;//此五位為空域,不能使用        
                  int c:3;
                   }
位域雖然簡單好用,但使用時需要注意:
1) 如果相鄰位域字段的類型相同,且其位寬之和小于類型的sizeof大小,則后面的字
段將緊鄰前一個字段存儲,直到不能容納為止;
2) 如果相鄰位域字段的類型相同,但其位寬之和大于類型的sizeof大小,則后面的字
段將從新的存儲單元開始,其偏移量為其類型大小的整數(shù)倍;
3) 整個結(jié)構(gòu)體的總大小為最寬基本類型成員大小的整數(shù)倍。
4) 如果相鄰的位域字段的類型不同,則各編譯器的具體實現(xiàn)有差異,VC6采取不壓縮方
式,Dev-C++采取壓縮方式;
5) 如果位域字段之間穿插著非位域字段,則不進(jìn)行壓縮;(不針對所有的編譯器
4 ,5跟編譯器有較大的關(guān)系,使用時要慎重,盡量避免。
下面用代碼說話:

點(diǎn)擊(此處)折疊或打開

  1. #include "stdio.h"


  2. void main(int argn ,char *argv)
  3. {
  4.     struct     test {
  5.         unsigned a:10;
  6.         unsigned b:10;
  7.         unsigned c:6;
  8.         unsigned :2;//this two bytes can't use
  9.         unsigned d:4;
  10.         }data,*pData;
  11.     data.a=0x177;
  12.     data.b=0x111;
  13.     data.c=0x7;
  14.     data.d=0x8;
  15.     
  16.     pData=&data;
  17.     printf("data.a=%x data.b= %x data.c=%x data.d=%xn",pData->a,pData->b,pData->c,pData->d);//位域可以使用指針

  18.     printf("sizeof(data)=%dn",sizeof(data));   //4 bytes ,最常用的情況

  19.     struct testLen{
  20.     char a:5;
  21.     char b:5;
  22.     char c:5;
  23.     char d:5;
  24.     char e:5;
  25.     }len;
  26.     
  27.     printf("sizeof(len)=%dn",sizeof(len));     //5bytes 規(guī)則2

  28.     struct testLen1{
  29.         char a:5;
  30.         char b:2;
  31.         char d:3;
  32.         char c:2;
  33.         char e:7;
  34.         }len1;
  35.     printf("sizeof(len1) =%dn",sizeof(len1));    //3bytes 規(guī)則1

  36.     struct testLen2{
  37.         char a:2;
  38.         char :3;
  39.         char b:7;
  40.         long d:20; //4bytes
  41.         char e:4;
  42.         }len2;
  43.     printf("sizeof(len2)=%dn",sizeof(len2));  //12 規(guī)則3,4,5,總長為4的整數(shù)倍,2+3 占1byte,b占1bye 由于與long對其,2+3+7 占4字節(jié),后面 d 與 e進(jìn)行了優(yōu)化 占一個4字節(jié)


  44.     struct testLen3{
  45.         char a:2;
  46.         char :3;
  47.         char b:7;
  48.         long d:30;
  49.         char e:4;
  50.         }len3;
  51.     printf("sizeof(len3)=%dn",sizeof(len3));//12 規(guī)則3,4,5,總長為4的整數(shù)倍,2+3 占1byte,b占1bye 由于與long對其,2+3+7 占4字節(jié),后面 d占一個4字節(jié),為了保證與long對其e獨(dú)占一個4字節(jié)
  52. }

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    风间中文字幕亚洲一区| 国产精品九九九一区二区| 亚洲欧美日韩中文字幕二欧美| 国产99久久精品果冻传媒| 99久只有精品免费视频播放| 国产精品视频一级香蕉| 亚洲天堂国产精品久久精品| 五月激情五月天综合网| 搡老熟女老女人一区二区| 日本免费一本一二区三区| 午夜福利92在线观看| 国产精品午夜性色视频| 日本加勒比在线观看一区| 国产精品日韩精品最新| 福利在线午夜绝顶三级| 亚洲欧美国产精品一区二区| 极品少妇一区二区三区精品视频| 国产精品亚洲一级av第二区| 亚洲熟妇熟女久久精品| 欧美日韩综合综合久久久| 色综合久久六月婷婷中文字幕| 国产亚洲精品岁国产微拍精品| 五月天丁香婷婷一区二区| 久久综合日韩精品免费观看| 亚洲成人黄色一级大片| 日本视频在线观看不卡| 日韩免费午夜福利视频| 加勒比东京热拍拍一区二区| 老熟妇2久久国内精品| 久草热视频这里只有精品| 日韩中文字幕免费在线视频| 麻豆在线观看一区二区| 久草国产精品一区二区| 99久久精品免费看国产高清| 最近中文字幕高清中文字幕无| 亚洲一区精品二人人爽久久| 久久久精品日韩欧美丰满| 国产亚州欧美一区二区| 久久中文字人妻熟女小妇| 人妻乱近亲奸中文字幕| 日本 一区二区 在线|