C语言课程第10章共同体与枚举类型.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第十章共同体与枚举类型北京邮电大学出版社内容提要•共同体类型与共同体变量•共同体变量的引用•位运算与位段结构•枚举类型•类型定义上一页下一页共同体类型的定义•一般形式–union共同体类型名{成员说明列表};–例如uniondata{intI;charch;floatf;};上一页下一页共同体类型变量的定义(1)•先定义共同体类型,再定义共同体类型变量uniondata{charch;floatf;};uniondataa,b,c;上一页下一页共同体类型变量的定义(2)•在定义共用体类型的同时定义共用体类型变量uniondata{inti;charch;floatf;}a,b,c;上一页下一页共同体类型变量的定义(3)•定义共用体类型时,省略共用体类型名,同时定义共用体类型变量union{inti;charch;floatf;}a,b,c上一页下一页共用体变量的引用•在定义共用体变量之后,就可以引用该共用体变量的某个成员–a.i,a.ch,a.f–注:一个共用体变量不是同时存放多个成员的值,而只能存放其中的一个值•通过指针变量引用共用体变量中的成员–uniondata*pt,x;pt=&x;pt-i=278;pt-ch=′D′;pt-f=5.78;•应用举例上一页下一页位运算(1)•数的补码表示–用补码表示数时,正数的补码是它本身。负数的补码是最高位(用来表示符号,0表示正数,1表示负数,称为符号位)为1,其余各位(数值位)先按位取反(即0变为1,1变为0),再在最低位加1。–由补码求真值(即实际二进制数)时,若符号位为0,则补码就是真值。若符号为1,则真值为负数,真值的数值位为补码的数值位各位按位取反后再在最低位加1(若进位位超出数值位的位数,则丢弃)。上一页下一页位运算(2)a2左移flag^0xC4按位异或^b3右移flag&0x37按位与&(关系运算符)(低)flag|0x5A按位或|(高)~flag按位取反~(算术运算符)举例(赋值运算符)优先级名称运算符上一页下一页位段结构•位段结构中位段的定义格式为:–unsigned〈成员名〉:〈二进制位数〉structbytedata{unsigneda:2;/*位段a,占两位*/unsigned:6;/*无名位段,占6位,但不能访问*/unsigned:0;/*无名位段,占0位,表示下一位段从下一字边界开始*/unsignedb:10;/*位段b,占10位*/inti;/*成员i,从下一字边界开始*/}data;–data变量的内存分配示意图上一页下一页位段结构注意事项–一个位段必须存储在同一存储单元(即字)之中,不能跨两个单元。如果其单元空间不够,则剩余空间不用,从下一个单元起存放该位段。–可以通过定义长度为0的位段的方式使下一位段从下一存储单元开始。–可以定义无名位段。–位段的长度不能大于存储单元的长度。–位段无地址,不能对位段进行取地址运算。–位段可以以%d,%o,%x格式输出。–位段若出现在表达式中,将被系统自动转换成整数。•应用举例上一页下一页枚举类型的定义(1)•一般形式–enum枚举类型名{标识符1,标识符2,……,标识符n};–例如enumcolorname{red,yellow,blue,white,black};enumcolornamecolor;–说明:变量color是枚举类型enumcolorname,它的值只能是red,yellow,blue,white或black上一页下一页枚举类型的定义(2)•关于枚举类型有几点说明–enum是关键字,标识枚举类型,定义枚举类型必须以enum开头–在定义枚举类型时花括号中的名字称为枚举元素或枚举常量–枚举元素不是变量,不能改变其值–枚举常量可以进行比较–一个枚举变量的值只能是这几个枚举常量之一,可以将枚举常量赋给一个枚举变量。但不能将一个整数赋给它–枚举常量不是字符串–应用举例上一页下一页类型定义•typedef定义类型,用typedef定义一个新类型名的方法如下:–先按定义变量的方法写出定义体(如chara[20];)。–将变量名换成新类型名(如charNAME[20];)。–在最前面加上typedef(如typedefcharNAME[20];)–然后可以用新类型名去定义变量(如NAMEc,d;)。•注:typedef只定义数据结构,并不要求分配存储单元,用typedef定义的类型来定义变量与直接写出变量的类型定义变量具有完全相同的效果上一页下一页再见!同学们:上一页下一页共用体变量的引用voidmain(){unionexx{inta,b;struct{intc,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,%d\n″,e.lpp.c,e.lpp.d);}程序运行结果如下:60,3600上一页下一页位段结构#include″stdio.h″voidmain(){intx,y;printf(″\n请输入十六进制整数:″);scanf(″%x″,&x);y=x(16-4)&0xf;x=(x4)&0xffff;/*16位的C语言程序不需要″按位与″0xffff*/x=x|y;printf(″循环左移4个二进制位得:%x″,x);}程序运行结果如下:请输入16进制整数:2fe1循环左移4个二进制位得:fe12上一页下一页枚举类型voidmain(){enumcolorname{red,yellow,blue,white,black};enumcolornamecolor;for(color=red;colorblack;color++)switch(color){casered:printf(″red″);break;caseyellow:printf(″yellow″);break;caseblue:printf(″blue″);break;casewhite:printf(″white″);break;caseblack:printf(″black″);break;}}

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功