国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C語言入門之枚舉與位運算(2)

2019-11-17 05:23:46
字體:
來源:轉載
供稿:網友
  位域

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

   strUCt 位域結構名

   { 位域列表 };

   其中位域列表的形式為: 類型說明符 位域名:位域長度

   例如:

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

   位域變量的說明與結構變量說明的方式相同。 可采用先定義后說明,同時定義說明或者直接說明這三種方式。例如:

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

   說明data為bs變量,共占兩個字節。其中位域a占8位,位域b占2位,位域c占6位。對于位域的定義尚有以下幾點說明:

   1. 一個位域必須存儲在同一個字節中,不能跨兩個字節。如一個字節所剩空間不夠存放另一位域時,應從下一單元起存放該位域。也可以有意使某位域從下一單元開始。例如:

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

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

   2. 由于位域不答應跨兩個字節,因此位域的長度不能大于一個字節的長度,也就是說不能超過8位二進位。

   3. 位域可以無位域名,這時它只用來作填充或調整位置。無名的位域是不能使用的。例如:

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

   從以上分析可以看出,位域在本質上就是一種結構類型, 不過其成員是按二進位分配的。

   二、位域的使用

   位域的使用和結構成員的使用相同,其一般形式為: 位域變量名·位域名 位域答應用各種格式輸出。

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

   上例程序中定義了位域結構bs,三個位域為a,b,c。說明了bs類型的變量bit和指向bs類型的指針變量pbit。這表示位域也是可以使用指針的。

   程序的9、10、11三行分別給三個位域賦值。( 應注重賦值不能超過該位域的答應范圍)程序第12行以整型量格式輸出三個域的內容。第13行把位域變量bit的地址送給指針變量pbit。第14行用指針方式給位域a重新賦值,賦為0。第15行使用了復合的位運算符"&=", 該行相當于: pbit->b=pbit->b&3位域b中原有值為7,與3作按位與運算的結果為3(111&011=011,十進制值為3)。同樣,程序第16行中使用了復合位運算"=", 相當于: pbit->c=pbit->c1其結果為15。程序第17行用指針方式輸出了這三個域的值。

   類型定義符typedef

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

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

typedef char NAME[20]; 表示NAME是字符數組類型,數組長度為20。

   然后可用NAME 說明變量,如: 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的結構類型,然后可用STU來說明結構變量: STU body1,body2;

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安阳市| 临澧县| 贵德县| 平远县| 通道| 广安市| 光山县| 集贤县| 府谷县| 庐江县| 兴宁市| 永德县| 甘泉县| 冕宁县| 山阳县| 沙坪坝区| 徐汇区| 阳谷县| 大安市| 财经| 阜平县| 南江县| 乐安县| 临漳县| 崇州市| 望谟县| 务川| 东台市| 固始县| 尉犁县| 绥棱县| 石台县| 信阳市| 和龙市| 神农架林区| 崇义县| 安泽县| 河南省| 东兰县| 博客| 通化市|