程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> C語言學習教程第八章-枚舉、位運算(5)

C語言學習教程第八章-枚舉、位運算(5)

編輯:C語言基礎知識

二、位域的使用位域的使用和結構成員的使用相同,其一般形式為: 位域變量名·位域名 位域允許用各種格式輸出。
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,%d\n",bit.a,bit.b,bit.c);
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->c|1其結果為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則是在編譯時完成的,後者更為靈活方便。

本章小結

1. 枚舉是一種基本數據類型。枚舉變量的取值是有限的,枚舉元素是常量,不是變量。

2. 枚舉變量通常由賦值語句賦值,而不由動態輸入賦值。枚舉元素雖可由系統或用戶定義一個順序值,但枚舉元素和整數並不相同,它們屬於不同的類型。因此,也不能用printf語句來輸出元素值(可輸出順序值)。

3. 位運算是C語言的一種特殊運算功能, 它是以二進制位為單位進行運算的。位運算符只有邏輯運算和移位運算兩類。位運算符可以與賦值符一起組成復合賦值符。如&=,|=,^=,>>=,<<=等。

4. 利用位運算可以完成匯編語言的某些功能,如置位,位清零,移位等。還可進行數據的壓縮存儲和並行運算。

5. 位域在本質上也是結構類型,不過它的成員按二進制位分配內存。其定義、說明及使用的方式都與結構相同。

6. 位域提供了一種手段,使得可在高級語言中實現數據的壓縮,節省了存儲空間,同時也提高了程序的效率。

7. 類型定義typedef 向用戶提供了一種自定義類型說明符的手段,照顧了用戶編程使用詞匯的習慣,又增加了程序的可讀性。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved