No.11-2《C语言程序设计》教案备注第十一讲位字段、联合和枚举目1.了解位字段的含义和位字段结构;的2.了解联合含义、说明及变量定义方法3.了解枚举的含义、说明及变量定义方法:要求学时划分3小时组织形式讲授+自学+独立作业+上机量1.位字段结构;点2.联合3.枚举难点[引题]上一次课,我们重点研究了结构的情况。通过学习大家知道,结构就是把不同数据类型的相互间又有联系的数据(元素)组织在一起而构成的集合体。定义结构变量的过程实质上就是明确了一个具有已说明的结构成员属性的对象。如:我们说明了如下结构:struct student1charid[7];charname[15];floatscore[5];1:若我们定义结构变量为:structstudentwang;则,变量wang就具有了结构structstudent中所有成员的属性,在计算机进行编译和执行程序时,就为它分配42个字节的存储空间。在以前的计算机基础课的学习中,大家知道,计算机内部对数据的存取都是以二进制码的形式进行的,所谓某数据占一个字节的内存,实质上就是占用8位二进制数的存储空间。比如说,int型数据占用2个字节的存储空间,实质上就是占用16位二进制的存储空间。01234567891011121314150000100000000010同时,我们还知道,计算机对数据进行处理时,首先是把数据从磁盘读到内存中,可以说,计算机对任何数据和信息的处理都是在内存中进行的。然而,任何计算机的内存空间都是有限的(如:8M、16M、32M、64M),对一个大型程序进行设计时,我们就必须考虑到尽量节省计算机内存的问题。否则,可能会出现因计算机内存不足而使程序无法运行。C语言提供了多种节省内存的方法。今天,我们就来研究第一种方法,即教材中的第八节内容
《C 语言程序设计》教案 No.11-2 第十一讲 位字段、联合和枚举 备 注 目 的 要 求 1.了解位字段的含义和位字段结构; 2.了解联合含义、说明及变量定义方法; 3.了解枚举的含义、说明及变量定义方法; 学时划分 3 小时 组织形式 讲授+自学+独立作业+上机 重 点 难 点 1. 位字段结构; 2. 联合 3. 枚举 [引题]上一次课,我们重点研究了结构的情况。通过学习大家知道, 结构就是把不同数据类型的相互间又有联系的数据(元素)组织在一 起而构成的集合体。定义结构变量的过程实质上就是明确了一个具有 已说明的结构成员属性的对象。如:我们说明了如下结构: struct student { char id[7]; char name[15]; float score[5]; }; 若我们定义结构变量为:struct student wang;则,变量 wang 就具有了结构 struct student 中所有成员的属性,在计算机进行编译 和执行程序时,就为它分配 42 个字节的存储空间。在以前的计算机 基础课的学习中,大家知道,计算机内部对数据的存取都是以二进制 码的形式进行的,所谓某数据占一个字节的内存,实质上就是占用 8 位二进制数的存储空间。比如说,int 型数据占用 2 个字节的存储空 间,实质上就是占用 16 位二进制的存储空间。 同时,我们还知道,计算机对数据进行处理时,首先是把数据从 磁盘读到内存中,可以说,计算机对任何数据和信息的处理都是在内 存中进行的。然而,任何计算机的内存空间都是有限的(如:8M、 16M、32M、64M),对一个大型程序进行设计时,我们就必须考虑 到尽量节省计算机内存的问题。否则,可能会出现因计算机内存不足 而使程序无法运行。C 语言提供了多种节省内存的方法。今天,我们 就来研究第一种方法,即教材中的第八节内容。 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
No.11-3第十一讲位字段联合和枚举7.8位字段结构一、什么是位字段[引题]计算机存储数据的方式给了我们启发,既然计算机是以二进制码的形式存储数据,而每个二进制码的取值只能是“0”或“1”,于是我们就利用计算机这种特点,使用一个或多个二进制位来表示一个对象的某些属性。如:C语言使用一个整型数的16位二进制位来表示01234567891011121314150010011000101010100100Lchar-keyword-intlongexternal-floatstatic-double如:0000100000000010表示:对应的标识符是外部变量,其数据类型为float型1.位字段:表示一个对象属性的二进制位或二进制位组2.说明(1)位字段是数据的一种压缩形式:(2)位字段整体上没有具体意义位操作方式举例:(flag为位字段标志字)#define KEYWORD01二、位字段的存取方式#defineEXTERNAL 02(一)位操作方式04#defineSTATIC位操作运算符(见P32)int flag=0, temp,~<<>>& ≤ ..flag -EXTERNALJSTATIC;通过相应的位操作,可以flag &=~(EXTERNALJSTATIC)得到某标志位状态,从而设置temp=flag&EXTERNAL了某标识符的相关属性if(flag&(EXTERNAL|STATIC)-0);
第十一讲 位字段 联合和枚举 No.11-3 7.8 位字段结构 一、什么是位字段 [引题]计算机存储数据的方式给了我们启发,既然计算机是以二进制 码的形式存储数据,而每个二进制码的取值只能是“0”或“1”,于 是我们就利用计算机这种特点,使用一个或多个二进制位来表示一个 对象的某些属性。如:C语言使用一个整型数的 16 位二进制位来表示 标识符的属性: 如:0 000 100 000 000 010 表示:对应的标识符是外部变量,其数据类型为 float 型 1.位字段: 表示一个对象属性的二进制位或二进制位组 2.说明 (1)位字段是数据的一种压缩形式; (2)位字段整体上没有具体意义,具体到某个位字段才有意义; 二、位字段的存取方式 (一)位操作方式 位操作运算符(见 P32) ~ << >> & ^ | 通过相应的位操作,可以 得到某标志位状态,从而设置 了某标识符的相关属性 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 char int keyword long external float static double #define STATIC 04 int flag=0, temp; . flag |=EXTERNAL|STATIC; flag &=~(EXTERNAL|STATIC); temp=flag&EXTERNAL if((flag&(EXTERNAL|STATIC))==0); 位操作方式举例:(flag 为位字段标志字) #define KEYWORD 01 #define EXTERNAL 02
No.11-4《C语言程序设计》教案说明:(二)位字段结构方式1.说明位字段结构定义举例:1.位字段结构的定义该项可以struct id_flag省略;struct[位字段结构类型名]12.el,e2....en是常量1unsigned is_keyword: 1;表达式,表unsigned is_external: 1;usigned位字段名1:el;示该位字unsigned is_static: 1;段占用二usigned1位字段名2:e2;进制位数;unsigned is_dummy:5;.unsigned is_char: 1;usigned位字段名n:en,unsigned is_int: 1,1位字段结构变量名:unsigned is_long: 1,unsigned is_float: 1,2.位字段的引用unsigned is_double: 1,(1)使用位字段结构变量isdummybit:3unsignedfalg. is_keywordIflag,falg. is_externalfalg. is_double... .if (flag.is_external==0)&&(falg. is_static=--0)(2)使用结构指针struct id flag flag,*pp=&flag;p->is_kewordp->is_external+..3.注意事项(1)位字段结构变量占用的存储空间同int型数据;(2)位字段可以不命名一无名字段:(3)位字段只能是usigned型,只能存于int类型变量中:(4)位字段的空间分配受系统影响;(三)说明C语言引入位字段结构,实质上就是通过定义一个int型变量的16个二进制位的状态,用以表示某对象的有关属性,这就相当于把某对象的属性压缩到了一个int型变量中,我们可以通过引用不同的位字段结构成员(位字段)而设置和判断某对象所具有的属性,而计算机只给int型变量分配内存
《C 语言程序设计》教案 No.11-4 (二)位字段结构方式 1.位字段结构的定义 struct [位字段结构类型名] { usigned 位字段名 1: e1; usigned 位字段名 2: e2; . usigned 位字段名 n: en; }位字段结构变量名; 2.位字段的引用 (1)使用位字段结构变量 falg. is_keyword falg. is_external falg. is_double . if ((flag.is_external==0)&&( falg. is_static==0)) (2)使用结构指针 struct id_flag flag,*p; p=&flag; p->is_keword p->is_external . 3.注意事项 (1)位字段结构变量占用的存储空间同 int 型数据; (2)位字段可以不命名-无名字段; (3)位字段只能是 usigned 型,只能存于 int 类型变量中; (4)位字段的空间分配受系统影响; (三)说明 C 语言引入位字段结构,实质上就是通过定义一个 int 型变量的 16 个二进制位的状态,用以表示某对象的有关属性,这就相当于把 某对象的属性压缩到了一个 int 型变量中,我们可以通过引用不同的 位字段结构成员(位字段)而设置和判断某对象所具有的属性,而计 算机只给 int 型变量分配内存。 说明; 1.[] 说 明 该项可以 省略; 2.e1,e2. en 是常量 表达式,表 示该位字 段占用二 进制位数; unsigned is_int: 1; unsigned is_long: 1; unsigned is_float: 1; unsigned is_double: 1; unsigned is_dummybit: 3; }flag; unsigned is_char: 1; 位字段结构定义举例: struct id_flag { unsigned is_keyword: 1; unsigned is_external: 1; unsigned is_static: 1; unsigned is_dummy: 5;
No.11-5第十一讲位字段联合和枚举7.9联合二、仕么是联合1.联合的含义类似于结构,也是由不同数据类型的数据组成的集合体,不过所有类型数据共享同一块存储空间:2.说明(1)联合实质是采用了覆盖技术;(2)使用联合节省空间,访问速度较慢二、联合的说明说明:1教材P245(一)一般形式flag应为union联合名float2.缺”;”联合说明举例:数据类型标识符成员名1;union u_tag数据类型标识符成员名2;int ival;.floatfval:数据类型标识符成员名n;char*pval;3;1;(二)说明同结构说明类似,联合的说明仅规定了联合的一种组织形式,并不分配内存。只是规定了联合使用内存的一种形式,即规定了一种类型。如上例说明,规定了一种名字为utag的联合类型,且由3个不同数据类型的成员(ival、fval、*pval)组成,在程序执行时它们使用同一块内存空间;定义与说明分开举例:三、联合变量的定义union uarea(一)联合说明方法char c,1.说明与定义分开shorts;union联合名long1;3;成员名1;unionuareaudata,数据类型标识符月数据类型标识符成员名2;
第十一讲 位字段 联合和枚举 No.11-5 7.9 联合 一、什么是联合 1.联合的含义 类似于结构,也是由不同数据类型的数据组成的集合体,不过所 有类型数据共享同一块存储空间; 2.说明 (1)联合实质是采用了覆盖技术; (2)使用联合节省空间,访问速度较慢; 二、联合的说明 (一)一般形式 union 联合名 { 数据类型标识符 成员名 1; 数据类型标识符 成员名 2; . 数据类型标识符 成员名 n; }; (二)说明 同结构说明类似,联合的说明仅规定了联合的一种组织形式,并 不分配内存。只是规定了联合使用内存的一种形式,即规定了一种类 型。如上例说明,规定了一种名字为 u_tag 的联合类型,且由 3 个不 同数据类型的成员(ival、fval、*pval)组成,在程序执行时它们使用 同一块内存空间; 三、联合变量的定义 (一)联合说明方法 1.说明与定义分开 union 联合名 { 数据类型标识符 成员名 1; 数据类型标识符 成员名 2; 说明: 1教材 P245 flag 应为 float 2.缺”;” float fval; char *pval; }; 定义与说明分开举例: union uarea udata; union uarea { char c; short s; long l; }; union u_tag { int ival; 联合说明举例:
No.11-6《C语言程序设计》教案.数据类型标识符成员名n,1;union联合名联合变量名表;2.定义与说明一起定义与说明一起举例:union联合名unionuarea11数据类型标识符成员名1;char c,shorts;数据类型标识符成员名2;long 1,.-Juarea udata,数据类型标识符成员名n;联合变量名表;3.定义与说明一起,缺省联合名定义与说明一起举例:unionunion1成员名1;数据类型标识符char c,成员名2;数据类型标识符short s;long 1,..Juareaudata数据类型标识符成员名n;联合变量名表;(二)几个问题1.编译时,系统按最长的成员分配内存(4字节)udatacs-2.结构与联合可以相互嵌套3.联合可以看作是所有成员在结构中的相对位移量是0;三、联合变量成员的引用类似于结构变量引用(.和->)
《C 语言程序设计》教案 No.11-6 . 数据类型标识符 成员名 n; }; union 联合名 联合变量名表; 2.定义与说明一起 union 联合名 { 数据类型标识符 成员名 1; 数据类型标识符 成员名 2; . 数据类型标识符 成员名 n; }联合变量名表; 3.定义与说明一起,缺省联合名 union { 数据类型标识符 成员名 1; 数据类型标识符 成员名 2; . 数据类型标识符 成员名 n; }联合变量名表; (二)几个问题 1.编译时,系统按最长的成员分配内存(4 字节) 2.结构与联合可以相互嵌套 3.联合可以看作是所有成员在结构中的相对位移量是 0; 三、联合变量成员的引用 类似于结构变量引用(.和->) 定义与说明一起举例: union uarea { char c; short s; long l; }uarea udata; 定义与说明一起举例: union { char c; short s; long l; }uarea udata; udata c s l