《枚举联合和位运算》PPT课件.ppt

上传人:tia****nde 文档编号:13118767 上传时间:2020-06-05 格式:PPT 页数:21 大小:74.50KB
返回 下载 相关 举报
《枚举联合和位运算》PPT课件.ppt_第1页
第1页 / 共21页
《枚举联合和位运算》PPT课件.ppt_第2页
第2页 / 共21页
《枚举联合和位运算》PPT课件.ppt_第3页
第3页 / 共21页
点击查看更多>>
资源描述
第七章枚举、联合和位运算,C引入两种用户自定义类型枚举与联合准确描述与表示数据。增强程序的可读性和数据访问的灵活性。C引入位运算增强C语言对数据处理的精细程序。C既有高级程序语言的特点,又有低级程序语言的特点。,7.1枚举型1枚举类型的定义enum枚举类型名取值表;例如,enumweekdaysSun,Mon,Tue,Wed,Thu,Fri,Sat;枚举变量的定义与结构变量类似(1)间接定义例如,enumweekdaysworkday;(2)直接定义例如,enumweekdaysSun,Mon,Tue,Wed,Thu,Fri,Satworkday;说明(1)使用赋值语句对枚举变量赋值,不能把一个枚举类型的数值赋给另一个枚举类型的变量。例如,man=male;brush=red;,(2)不能直接输入/输出枚举类型变量的值,必要时可以通过枚举值间接的输入/输出。例如,输入:scanf(“%d”,(3)枚举类型的比较、算术和逻辑运算等,实际上是用其枚举值进行运算的。比如:day1=sun;/sun的值为0day2=fri;/fri的值为5if(day1day2)x=day1+day2;,(4)枚举的一般定义格式为:enum枚举类型名标识符0=整型常数,标识符1=整型常数,标识符n=整型常数,,(5)枚举常量必须是标识符,不能是整数、字符或者其它符号。例如:enumdigital1,2,3,4,5,6;/整数不能作为枚举常量enumalpa,b,c;/字符不能作为枚举常量enumop+,-,*;/操作符不能作为枚举常量,(6)枚举常量是标识符,定义枚举类型时也就定义了这些标识符,因为标识符不能重复定义,所以枚举常量也不能与前面已经定义过的标识符重复。例如:enumq1a,b,c,d,a;/a被重复定义又如:#definen100;enumq1a,b,c,d,e;enumq2b,n,d1,e1;/其中b与n被重复定义,7.2联合体构造数据类型,也叫共用体用途:使几个不同类型的变量共占一段内存(相互覆盖)联合体类型定义定义形式:,union联合类型名类型标识符成员名;类型标识符成员名;.变量名表;,例uniondataintix;charch;longf;a;,类型定义不分配内存,形式一:uniondatainti;charch;floatf;a,b;,形式二:uniondatainti;charch;floatf;uniondataa,b,c,*p,d3;,形式三:unioninti;charch;floatf;a,b,c;,共用体变量的定义,共用体变量定义分配内存,长度=最长成员所占字节数,共用体变量任何时刻只有一个成员存在,共用体变量引用引用方式:,例a.i=1;a.ch=a;a.f=1.5;printf(“%d”,a.i);(编译通过,运行结果不对),引用规则不能引用共用体变量,只能引用其成员,共用体变量中起作用的成员是最后一次存放的成员,例unioninti;charch;floatf;a;a=1;(),不能在定义共用体变量时初始化,例unioninti;charch;floatf;a=1,a,1.5;(),可以用一个共用体变量为另一个变量赋值,例floatx;unioninti;charch;floatf;a,b;a.i=1;a.ch=a;a.f=1.5;b=a;()x=a.f;(),例将一个整数按字节输出,运行结果:i=60501ch0=101,ch1=141ch0=A,ch1=a,main()unionint_charinti;charch2;x;x.i=24897;printf(i=%on,x.i);printf(ch0=%o,ch1=%onch0=%c,ch1=%cn,x.ch0,x.ch1,x.ch0,x.ch1);,7.3位运算,为了节省内存空间,在系统软件中常将多个标志状态简单地组合在一起,存储到一个字节(或字)中。语言是为研制系统软件而设计的,所以她提供了实现将标志状态从标志字节中分离出来的位运算功能。所谓位运算是指,按二进制位进行的运算。,例如,+9的原码是00001001符号位上的0表示正数-9的原码是10001001。符号位上的1表示负数3.数值的反码表示数值的反码表示分两种情况:(1)正数的反码:与原码相同。例如,+9的反码是00001001。(2)负数的反码:符号位为1,其余各位为该数绝对值的原码按位取反(1变0、0变1)。例如,-9的反码:因为是负数,则符号位为“1”;其余7位为-9的绝对值+9的原码0001001按位取反为1110110,所以-9的反码是11110110。,7.3.1位运算及其运算符1按位与/*符号标志*/unsignedzero:1;/*零标志*/unsignedcarry:1;/*进位标志*/unsignedparity:1;/*奇偶/溢出标志*/unsignedhalf_carry:1;/*半进位标志*/unsignednegative:1;/*减标志*/flags;,显然,对CPU的状态寄存器而言,使用位段类型(仅需1个字节),比使用结构类型(需要6个字节)节省了5个字节。2.说明(1)因为位段类型是一种结构类型,所以位段类型和位段变量的定义,以及对位段(即位段类型中的成员)的引用,均与结构类型和结构变量一样。(2)对位段赋值时,要注意取置范围。一般地说,长度为n的位段,其取值范围是:0(2n-1)。(3)使用长度为0的无名位段,可使其后续位段从下1个字节开始存储。例如,structstatusunsignedsign:1;/*符号标志*/unsignedzero:1;/*零标志*/unsignedcarry:1;/*进位标志*/unsigned:0;/*长度为0的无名位段*/unsignedparity:1;/*奇偶/溢出标志*/unsignedhalf_carry:1;/*半进位标志*/unsignednegative:1;/*减标志*/flags;,原本6个标志位是连续存储在1个字节中的。由于加入了1个长度为0的无名位段,所以其后的3个位段,从下1个字节开始存储,一共占用2个字节。(4)1个位段必须存储在1个存储单元(通常为1字节)中,不能跨2个。如果本单元不够容纳某位段,则从下1个单元开始存储该位段。(5)可以用%d、%x、%u和%o等格式字符,以整数形式输出位段。(6)在数值表达式中引用位段时,系统自动将位段转换为整型数。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!