C语言课程共同体与枚举类型_第1页
C语言课程共同体与枚举类型_第2页
C语言课程共同体与枚举类型_第3页
C语言课程共同体与枚举类型_第4页
C语言课程共同体与枚举类型_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第十章第十章 共同体与枚举类型共同体与枚举类型北京邮电大学出版社北京邮电大学出版社内容提要 共同体类型与共同体变量 共同体变量的引用 位运算与位段结构 枚举类型 类型定义C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页共同体类型的定义 一般形式 union 共同体类型名 成员说明列表 ;例如 union data int I; char ch; float f; ;C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一

2、页下一页共同体类型变量的定义(1) 先定义共同体类型,再定义共同体类型变量 union data char ch; float f; union data a,b,c;C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页共同体类型变量的定义(2) 在定义共用体类型的同时定义共用体类型变量 union data int i; char ch; float f;a,b,c; C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下

3、一页下一页共同体类型变量的定义(3)定义共用体类型时,省略共用体类型名,同时定义共用体类型变量 union int i;char ch;float f;a,b,c C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页共用体变量的引用 在定义共用体变量之后,就可以引用该共用体变量的某个成员 a.i,a.ch,a.f 注:一个共用体变量不是同时存放多个成员的值,而只能存放其中的一个值 通过指针变量引用共用体变量中的成员 union data *pt,x;pt=&x;pt-i=278;pt-ch=D;

4、pt-f=5.78; 应用举例C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页位运算(1) 数的补码表示 用补码表示数时,正数的补码是它本身。负数的补码是最高位(用来表示符号,0表示正数,1表示负数,称为符号位)为1,其余各位(数值位)先按位取反(即0变为1,1变为0),再在最低位加1。 由补码求真值(即实际二进制数)时,若符号位为0,则补码就是真值。若符号为1,则真值为负数,真值的数值位为补码的数值位各位按位取反后再在最低位加1(若进位位超出数值位的位数,则丢弃)。 C C语言程序设计语言程序设计

5、C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页位运算(2)a 2左移 3右移flag & 0 x37按位与&(关系运算符)(低)flag | 0 x5A按位或|(高)flag按位取反(算术运算符)举例(赋值运算符)优先级名称运算符C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页位段结构 位段结构中位段的定义格式为: unsigned 成员名:二进制位数 struct bytedata unsigned a:2;/*位

6、段a,占两位*/ unsigned:6; /*无名位段,占6位,但不能访问*/ unsigned:0; /*无名位段,占0位,表示下一位段 从下一字边界开始*/ unsigned b:10; /*位段b,占10位*/ int i; /*成员i,从下一字边界开始*/data; data变量的内存分配示意图 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页位段结构注意事项 一个位段必须存储在同一存储单元(即字)之中,不能跨两个单元。如果其单元空间不够,则剩余空间不用,从下一个单元起存放该位段。 可以通过

7、定义长度为0的位段的方式使下一位段从下一存储单元开始。 可以定义无名位段。 位段的长度不能大于存储单元的长度。 位段无地址,不能对位段进行取地址运算。 位段可以以%d,%o,%x格式输出。 位段若出现在表达式中,将被系统自动转换成整数。 应用举例 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页枚举类型的定义(1) 一般形式 enum 枚举类型名标识符1,标识符2,标识符n; 例如enum colornamered,yellow,blue,white,black; enum colorname co

8、lor; 说明:变量color是枚举类型enum colorname,它的值只能是red,yellow,blue,white或black C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页枚举类型的定义(2) 关于枚举类型有几点说明 enum是关键字,标识枚举类型,定义枚举类型必须以enum开头 在定义枚举类型时花括号中的名字称为枚举元素或枚举常量 枚举元素不是变量,不能改变其值 枚举常量可以进行比较 一个枚举变量的值只能是这几个枚举常量之一,可以将枚举常量赋给一个枚举变量。但不能将一个整数赋给它 枚

9、举常量不是字符串 应用举例C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页类型定义 typedef定义类型,用typedef定义一个新类型名的方法如下: 先按定义变量的方法写出定义体(如char a20;)。 将变量名换成新类型名(如char NAME20;)。 在最前面加上typedef(如typedef char NAME20;) 然后可以用新类型名去定义变量(如NAME c,d;)。 注:typedef只定义数据结构,并不要求分配存储单元,用typedef定义的类型来定义变量与直接写出变量的类

10、型定义变量具有完全相同的效果 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页再见!再见!同学们:同学们:C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页共用体变量的引用 void main()union exx int a,b;structint c,d;lpp;e=10;e.b=e.a+20;e.lpp.c=e.a+e.b;e.lpp.d=e.a*e.b;printf(%d,%dn,e.lpp.c,e

11、.lpp.d); 程序运行结果如下:程序运行结果如下:6060,36003600C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页位段结构 #include stdio.hvoid main()int x,y; printf(n请输入十六进制整数请输入十六进制整数:); scanf(%x,&x); y=x(16-4)&0 xf; x=(x4)&0 xffff; /*16位的位的C语言程序不需要语言程序不需要按位与按位与0 xffff*/ x=x|y; printf(循环左移循环左移4个二进制位得个二进制位得:%x,x); 程序运行结果如下:程序运行结果如下:请输入请输入1616进制整数:进制整数:2fe12fe1循环左移循环左移4 4个二进制位得:个二进制位得:fe12fe12 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页枚举类型void main() enum colornamered,yellow,blue,white,black; enum colorname color; for(color=red;c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论