二、位域的运用位域的运用和构组成员的运用相反,其一样平时形式为: 位域变量名·位域名 位域容许用种种格式输出。
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 向用户供给了一种自定义典范阐明符的技艺,赐顾光顾了用户编程运用词汇的习气,又增添了法度的可读性。
版权声明:
原创作品,容许转载,转载时请务必以超链接形式标明文章 原始来由 、作者信息和本声明。不然将清查功令责任。