位結構

轉自:http://blog.chinaunix.net/u/17030/showart_101273.html

一、概念 

位結構是一種特殊的結構, 在需按位訪問一個字節或字的多個位時, 位結構比按位運算符更加方便。

    位結構定義的一般形式爲:

     struct位結構名{

          數據類型 變量名: 整型常數;

          數據類型 變量名: 整型常數;

     } 位結構變量;

其中:

數據類型必須是int(unsignedsigned) 整型常數必須是非負的整數, 範圍是0~32, 表示二進制位的個數, 即表示有多少位。

    變量名是選擇項, 可以不命名, 這樣規定是爲了排列需要。

    例如: 下面定義了一個位結構。

     struct{

          unsigned incon: 8;  /*incon佔用低字節的0~78*/

          unsigned txcolor: 4;/*txcolor佔用高字節的0~3位共4*/

          unsigned bgcolor: 3;/*bgcolor佔用高字節的4~6位共3*/

          unsigned blink: 1;  /*blink佔用高字節的第7*/

     }ch;

    位結構成員的訪問與結構成員的訪問相同。

    例如: 訪問上例位結構中的bgcolor成員可寫成:

      ch.bgcolor

二、注意事項

    1. 位結構中的成員可以定義爲unsigned, 也可定義爲signed,  但當成員長度爲1, 會被認爲是unsigned類型。因爲單個位不可能具有符號。

    2. 位結構中的成員不能使用數組和指針, 但位結構變量可以是數組和指針,如果是指針, 其成員訪問方式同結構指針。

    3. 位結構總長度(位數), 是各個位成員定義的位數之和,  可以超過兩個字節。

    4. 位結構成員可以與其它結構成員一起使用。

    例如:

     struct info{

          char name[8];

          int age;

          struct addr address;

          float pay;

          unsigned state: 1;

          unsigned pay: 1;

          }workers;

   上例的結構定義了關於一個工人的信息。其中有兩個位結構成員, 每個位結構成員只有一位, 因此只佔一個字節但保存了兩個信息, 該字節中第一位表示工人的狀態, 第二位表示工資是否已發放。由此可見使用位結構可以節省存貯空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章