站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        C語(yǔ)言入門之枚舉與位運(yùn)算(2)

          位域

           有些信息在存儲(chǔ)時(shí),并不需要占用一個(gè)完整的字節(jié), 而只需占幾個(gè)或一個(gè)二進(jìn)制位。例如在存放一個(gè)開關(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)名

           { 位域列表 };

           其中位域列表的形式為: 類型說(shuō)明符 位域名:位域長(zhǎng)度

           例如:

        struct bs
        {
          int a:8;
          int b:2;
          int c:6;
        };

           位域變量的說(shuō)明與結(jié)構(gòu)變量說(shuō)明的方式相同。 可采用先定義后說(shuō)明,同時(shí)定義說(shuō)明或者直接說(shuō)明這三種方式。例如:

        struct bs
        {
          int a:8;
          int b:2;
          int c:6;
        }data;

           說(shuō)明data為bs變量,共占兩個(gè)字節(jié)。其中位域a占8位,位域b占2位,位域c占6位。對(duì)于位域的定義尚有以下幾點(diǎn)說(shuō)明:

           1. 一個(gè)位域必須存儲(chǔ)在同一個(gè)字節(jié)中,不能跨兩個(gè)字節(jié)。如一個(gè)字節(jié)所剩空間不夠存放另一位域時(shí),應(yīng)從下一單元起存放該位域。也可以有意使某位域從下一單元開始。例如:

        struct bs
        {
          unsigned a:4
          unsigned :0 /*空域*/
          unsigned b:4 /*從下一單元開始存放*/
          unsigned c:4
        }

           在這個(gè)位域定義中,a占第一字節(jié)的4位,后4位填0表示不使用,b從第二字節(jié)開始,占用4位,c占用4位。

           2. 由于位域不允許跨兩個(gè)字節(jié),因此位域的長(zhǎng)度不能大于一個(gè)字節(jié)的長(zhǎng)度,也就是說(shuō)不能超過(guò)8位二進(jìn)位。

           3. 位域可以無(wú)位域名,這時(shí)它只用來(lái)作填充或調(diào)整位置。無(wú)名的位域是不能使用的。例如:

        struct k
        {
          int a:1
          int :2 /*該2位不能使用*/
          int b:3
          int c:2
        };

           從以上分析可以看出,位域在本質(zhì)上就是一種結(jié)構(gòu)類型, 不過(guò)其成員是按二進(jìn)位分配的。

           二、位域的使用

           位域的使用和結(jié)構(gòu)成員的使用相同,其一般形式為: 位域變量名·位域名 位域允許用各種格式輸出。

        main(){
          struct bs
          {
           unsigned a:1;
           unsigned b:3;
           unsigned c:4;
          } bit,*pbit;
          bit.a=1;
          bit.b=7;
          bit.c=15;
          printf(“%d,%d,%dn”,bit.a,bit.b,bit.c);
          pbit=&bit;
          pbit->a=0;
          pbit->b&=3;
          pbit->c|=1;
          printf(“%d,%d,%dn”,pbit->a,pbit->b,pbit->c);
        }

           上例程序中定義了位域結(jié)構(gòu)bs,三個(gè)位域?yàn)閍,b,c。說(shuō)明了bs類型的變量bit和指向bs類型的指針變量pbit。這表示位域也是可以使用指針的。

           程序的9、10、11三行分別給三個(gè)位域賦值。( 應(yīng)注意賦值不能超過(guò)該位域的允許范圍)程序第12行以整型量格式輸出三個(gè)域的內(nèi)容。第13行把位域變量bit的地址送給指針變量pbit。第14行用指針?lè)绞浇o位域a重新賦值,賦為0。第15行使用了復(fù)合的位運(yùn)算符”&=”, 該行相當(dāng)于: pbit->b=pbit->b&3位域b中原有值為7,與3作按位與運(yùn)算的結(jié)果為3(111&011=011,十進(jìn)制值為3)。同樣,程序第16行中使用了復(fù)合位運(yùn)算”|=”, 相當(dāng)于: pbit->c=pbit->c|1其結(jié)果為15。程序第17行用指針?lè)绞捷敵隽诉@三個(gè)域的值。

           類型定義符typedef

           C語(yǔ)言不僅提供了豐富的數(shù)據(jù)類型,而且還允許由用戶自己定義類型說(shuō)明符,也就是說(shuō)允許由用戶為數(shù)據(jù)類型取“別名”。 類型定義符typedef即可用來(lái)完成此功能。例如,有整型量a,b,其說(shuō)明如下: int aa,b; 其中int是整型變量的類型說(shuō)明符。int的完整寫法為integer,

           為了增加程序的可讀性,可把整型說(shuō)明符用typedef定義為: typedef int INTEGER 這以后就可用INTEGER來(lái)代替int作整型變量的類型說(shuō)明了。 例如: INTEGER a,b;它等效于: int a,b; 用typedef定義數(shù)組、指針、結(jié)構(gòu)等類型將帶來(lái)很大的方便,不僅使程序書寫簡(jiǎn)單而且使意義更為明確,因而增強(qiáng)了可讀性。例如:

        typedef char NAME[20]; 表示NAME是字符數(shù)組類型,數(shù)組長(zhǎng)度為20。

           然后可用NAME 說(shuō)明變量,如: NAME a1,a2,s1,s2;完全等效于: char a1[20],a2[20],s1[20],s2[20]
        又如:

        typedef struct stu{ char name[20];
          int age;
          char sex;
        } STU;

           定義STU表示stu的結(jié)構(gòu)類型,然后可用STU來(lái)說(shuō)明結(jié)構(gòu)變量: STU body1,body2;

           typedef定義的一般形式為: typedef 原類型名 新類型名 其中原類型名中含有定義部分,新類型名一般用大寫表示, 以便于區(qū)別。在有時(shí)也可用宏定義來(lái)代替typedef的功能,但是宏定義是由預(yù)處理完成的,而typedef則是在編譯時(shí)完成的,后者更為靈活方便。

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 久久99精品国产| 精品人妻少妇一区二区三区不卡| 欧洲精品视频在线观看| 亚洲国产精品丝袜在线观看| 2021最新国产精品一区| 中文字幕精品一区二区日本| 久久精品国产只有精品66| 欧美精品v欧洲精品| 国产精品嫩草影院久久| 国产韩国精品一区二区三区久久 | 亚洲国产精品久久电影欧美| 国产专区日韩精品欧美色| 久久精品这里热有精品| 精品国产一区二区三区久久久狼| 亚洲欧美一级久久精品| 精品久久人人做人人爽综合| 国产精品 猎奇 另类视频| 精品一区二区三区四区| 91精品美女在线| 久久99国产精品尤物| 无码人妻精品一区二区三区99仓本 | 99久久精品无码一区二区毛片| 99久久99这里只有免费的精品| 国产久热精品无码激情| 久久精品国产亚洲77777| 亚洲国产精品无码久久久秋霞2| 亚洲国产成人精品久久久国产成人一区二区三区综| 国产精品成人一区二区| 99精品视频在线观看婷| 欧美日韩在线亚洲国产精品| 久久777国产线看观看精品| 国产精品嫩草影院一二三区入口 | 奇米影视7777久久精品| 97精品一区二区视频在线观看| 乱精品一区字幕二区| 亚洲精品国产品国语在线| 午夜精品久久久久久影视777| 午夜三级国产精品理论三级 | 欧美一区二区精品久久| 日本欧美韩国日本精品| 欧美一区二区精品系列在线观看|