第3章 运算符和表达式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

double long
unsigned
float

int
char,short
横向箭头表示必须的转换 ,纵向箭头表示当运 算符两侧的运算对象为不同类型时的转换, 这些转换都是由系统自动进行的 。
北京邮电大学出版社
3.4 不同数据类型数据间的混合运算
二.强制类型转换 强制类型转换是通过类型转换运算来实现的。 其一般形式为: (类型说明符)(表达式) (类型说明符)是类型转换运算符,单目运算, 优先级别为2级,具右结合性。在类型转换 运算符的右侧跟上表达式形成类型转换表达 式,其功能是把表达式的运算结果强制转换 成类型说明符所表示的类型。
北京邮电大学出版社
3.2 算术运算符
二.算术表达式
算术表达式是用算术运算符和括号将运算对象连接起来 的、符合C语言的语法规则的式子。 使用算术表达式时应注意: (1) 当双目算术运算符两侧运算对象的类型一致时,运算 结果的类型与运算对象的类型相同,如果类型不一 致,系统将自动按规律先将运算对象转换为同一类 型,然后再进行运算。 (2) 可以用括号改变表达式的运算顺序,左右括号必须配 对,多层括号都用小括号“()”表示。 (3) 注意算术表达式的书写形式,不要写成代数式的形式。
北京邮电大学出版社
3.4 不同数据类型数据间的混合运算
三.强制类型转换 赋值表达式的类型转换 当赋值运算符两侧的运算对象数据类型不同时, 系统也将进行自动类型转换,转换规则为: 将赋值运算符右侧表达式的类型转换为左侧变量 的类型。
北京邮电大学出版社
3.4 不同数据类型数据间的混合运算
1.浮点型与整型相互转换 将浮点数据(包括单、双精度)转换为整型时,将舍弃浮点数的小 数部分,只保留整数部分。 2.单、双精度浮点型相互转换 由于C语言中的浮点值总是用双精度表示的,所以float型数据只是 在尾部加0延长为double型数据参加运算,然后直接赋值。 double型数据转换为float型时,先截取双精度实数的前7位有效数 字,然后再赋给单精度类型的变量。 3.字符型与整型相互转换 将整型数据赋给字符型变量时,由于整型数据用两个字节存放,而 字符型数据用一个字节存放,所以只保留其低8位赋给字符型 变量,高位部分舍弃。 字符型数据赋给整型变量时,将字符数据的8位放入整型变量的低8 位中,有些编译系统在整型变量的高8位补0;而有些编译系 统(如Turbo C),根据字符的最高位为0或1将高8位全部补 0或补1。
北京邮电大学出版社
3.7
其它运算符
sizeof的使用形式比较像是函数调用,但它是一 种运算符。 其一般应用形式为: sizeof(运算对象) sizeof运算的功能是求出运算对象在计算机的内 存中所占用的字节数。其中运算对象可以是 数据类型说明符或表达式,当运算对象是表 达式时括号可省略。 sizeof是单目运算符,优先级别为2,具右结合 性,运算的结果是整型。
北京邮电大学出版社
3.3 赋值运算符
二.复合赋值运算符 在赋值运算符“=”之前加上其它一些双目运算符可以构 成复合赋值运算符,用于完成运算、赋值组合操作。 C语言中复合赋值运算符的一般形式为: 运算符= 其中“运算符”可以是: +、-、*、/、%、|、&、^、<<、>> 所构成的复合赋值运算符是: +=、-=、*=、/=、%=、|=、&=、^=、<<=、>>= 所有的赋值运算符包括复合赋值运算符的优先级全部相 同,均为右结合性。
北京邮电大学出版社
本章小结
5.自增、自减运算符 (1) 自增、自减其实也是赋值运算,只能针对变量做自增、 自减运算。 (2) 注意前置运算(先增减后运算)与后置运算(先运算 后增减)对所在表达式的影响的不同。 6.逗号运算符 (1) 逗号表达式的值取最后一个表达式的值。 (2) 逗号运算符的优先级最低。 7.其它运算符 (1) sizeof是运算符,不是函数名。 (2) sizeof求表达式在内存中所占的字节数。
3.1 表达式
四.优先级和结合性
优先级指同一个表达式中不同运算符进行运算时 的优先次序。
结合性是针对同一优先级的多个运算符而言的, 它是指同一个表达式中相同优先级的多个运 算是自左向右进行运算还是自右向左进行运 算。 关于C语言运算符的含义、类型、优先级、结合 性等问题见附录B。
北京邮电大学出版社
北京邮电大学出版社
3.5 自增、自减运算符
二.关于自增自减运算符、表达式的说明


ቤተ መጻሕፍቲ ባይዱ
自增、自减运算符实际上属于赋值运算符,不能应 用于常量和表达式,操作对象只能是变量。
一般自增自减表达式或是以表达式语句的形式出现, 或是出现在for循环语句中使循环控制变量加(减) 1,或应用于指针变量,使指针指向下(上)一个 地址。其它将自增自减表达式应用于另一个表达式 内部的形式,在尚未熟练掌握时尽量不去使用。 最好不要使用诸如i+++j、(i++)+(i++)此类容易产生 歧义或错误的形式。
第3章 运算符和表达式
3.1 表达式 3.2 算术运算符 3.3 赋值运算符 3.4 不同数据类型数据间的混合运算 3.5 自增、自减运算符 3.6 逗号运算符 3.7 其它运算符 本章小结 习题参考答案
北京邮电大学出版社
3.1 表达式
一.表达式 表达式是由运算对象、运算符按照C语言的语法 规则构成的符号序列。表达式可以通过运算 产生一个结果或完成某种操作。 C语言的表达式功能很强,也很复杂,它提供了 许多种运算符
北京邮电大学出版社
3.1 表达式
二.运算符 运算符是C语言里用于描述对数据进行运算的特 殊符号。 C语言有三大运算符:算术、关系 与逻辑、位操作。
北京邮电大学出版社
3.1 表达式
三.运算符和表达式的分类 1 .运算符的分类 ① 按在表达式中与运算对象的关系(所需要运 算对象的个数)可以分为: 单目运算符 双目运算符 三目运算符
北京邮电大学出版社
3.3 赋值运算符
一.普通赋值运算符 1.赋值运算符 赋值符号“=”就是赋值运算符,其功能是将赋 值运算符“=”右侧表达式的值求出并将结 果赋值给“=”左侧的变量。 赋值运算符的优先级很低,仅高于逗号运算符, 为右结合性。
北京邮电大学出版社
3.3 赋值运算符
2.赋值表达式 用赋值运算符将一个变量和一个表达式连接起来 的符合C语言语法的式子称做赋值表达式。 它的一般形式为: 变量名 = 表达式 赋值表达式的结果是赋值号右侧的表达式的值。 求解赋值表达式时,如果赋值运算符两侧的数据 类型不一致,赋值时要进行类型转换。转换 的原则是将右侧的表达式的值转换为左侧变 量的类型再进行对左侧变量赋值。

北京邮电大学出版社
3.6
逗号运算符
逗号运算符就是用逗号“,”作为操作符,它可 以把多个表达式连接起来形成逗号表达式。 逗号运算符又称顺序求值运算符。 逗号运算符为双目运算,其优先级别是C中所有 运算符中最低的,具左结合性。 逗号表达式扩展为n元运算的形式: 表达式1, 表达式2, „„ , 表达式n 逗号表达式的求值过程是自左向右,依次计算各 子表达式的值,最右侧子表达式“表达式n” 的值即为整个逗号表达式的值。
北京邮电大学出版社
3.1 表达式
② 按它们在表达式中所起的作用又可以分为: 算术运算符: +、-、*、/、% 赋值运算符: =、+=、-=、*=、/=、%=、 &=、|=、^=、<<=、>>= 自增自减运算符: ++、- 关系运算符: <、<=、>、>=、==、!= 逻辑运算符: !、&&、|| 条件运算符: ?: 位运算符: ~、&、^、|、<<、>> 逗号运算符: , 其它运算符: ()、[]、->、.、(类型名)、*、&、 sizeof
北京邮电大学出版社
3.4 不同数据类型数据间的混合运算
4.整型与长整型相互转换 长整型数据赋值给整型变量时,将低16位值送给整型变 量,将高16位截断舍弃。 将整型数据赋值给长整型变量时,将整型数据的16位送 到长整型变量的低16位中,根据整型数据符号位为 0或1,在长整型的高16位全部补0或1,以保持数值 不改变。 5.无符号整数与有符号整数相互转换 若占据同样长度存储单元的有符号、无符号整型相互转 换时,是原样赋值,内部的存储方式不变,但外部 值可能改变。 若占据不同长度存储单元的有符号、无符号整型之间转 换,先参照(4)中所述方式进行转换,再按上面字 节数相同的方式直接赋值。
北京邮电大学出版社
3.1 表达式
2 .表达式的分类 ① 按照运算符要求运算对象的个数可以分为: 单目表达式 双目表达式 三目表达式 ② 按照运算符在表达式中的作用,可以分为: 算术表达式赋值表达式 自增、自减表达式 关系表达式 逻辑表达式 逗号表达式
北京邮电大学出版社
3.2 算术运算符
一.算术运算符 +:加法运算符 -:减法运算符 *:乘法运算符 /:除法运算符 当运算对象均为整数时运算结果也为整数。 %:求余运算符(模运算符)。 要求%两侧运算对象均为整型数据。 算术运算符均为双目运算符,均具有左结合性。*、/、 %的优先级为3级,+、-的优先级为4级。
北京邮电大学出版社
本章小结
2.算术运算符 (1) 整数相除是做整除,结果也为整数。 (2) 求余运算要求运算对象均为整型。 (3) 注意运算时的类型转换问题。 (4) 注意C语言表达式与数学公式在形式上的差 异。 3.赋值运算符 (1) 赋值表达式的左边必须为变量。 (2) 复合赋值运算符的优先级全部在同一级别。 (3) 注意赋值时的类型转换。
北京邮电大学出版社
3.5 自增、自减运算符
一.自增自减运算符、表达式 ++:自增运算符,使变量的值增加1。 --:自减运算符,使变量的值减少1。 自增、自减运算符均为单目运算符,优先级为2, 具右结合性。
北京邮电大学出版社
3.5 自增、自减运算符
一.自增自减运算符、表达式 自增、自减运算符都有两种用法: 前置运算 将++或--运算符置于变量之前,一般形式为:++变量、-变量。 其功能是使变量的值增(减)1,然后再以变化后的变 量值参与其它运算,即先增减、后运算。 后置运算 将++或--运算符置于变量之后,一般形式为:变量++、 变量--。 其功能是变量先参与其它运算,然后再使变量的值增 (减)1,即先运算、后增减。
北京邮电大学出版社
本章小结
本章主要介绍了运算符与表达式,其中涉及到的重要概 念有:运算对象的个数、运算优先级、结合性、类 型转换等。运算符是C语言里用于描述对数据进行 运算的特殊符号。表达式是由运算符连接常量、变 量、函数所组成的式子,每个表达式都有一个值和 类型。表达式求值按运算符的优先级和结合性所规 定的顺序进行。 1.运算符优先级和结合性 一般而言,单目运算符优先级较高,赋值运算符优先级 较低。算术运算符优先级较高,关系和逻辑运算符 优先级较低。多数运算符具有左结合性,而单目运 算符、三目运算符、赋值运算符具有右结合性。
北京邮电大学出版社
本章小结
4.类型转换 (1) 自动转换:在不同类型数据的混合运算中,由系统自 动实现转换,由少字节类型向多字节类型转换。 (2) 强制转换:由强制转换运算符完成转换。 (3) 赋值时的类型转换:不同类型的量相互赋值时也由系 统自动进行转换,把赋值号右边的类型转换为左边 变量的类型。 (4) 无论是系统所做的自动类型转换还是强制类型转换, 都只是将常量、变量、表达式的值进行转换去参与 运算,不会改变变量的数据类型和值。
北京邮电大学出版社
3.3 赋值运算符
由复合赋值运算符将一个变量和一个表达式连接 起来的式子称为复合赋值表达式。 它的一般形式为: 变量名 复合赋值运算符 表达式 复合赋值表达式的作用等价于: 变量名=变量名 运算符 (表达式) 即先将变量和表达式进行复合赋值运算符所指定 的运算,然后将运算结果赋给变量。复合赋 值表达式的值就是复合赋值运算符左侧变量 被赋值以后的值。
北京邮电大学出版社
3.4 不同数据类型数据间的混合运算
一.自动类型转换
整型、实型、字符型数据间可以混合进行算术运 算。进行运算时,参与运算的操作数的数据 类型要一致,若参与运算的数据类型不同, 先要将其转换为相同的类型,然后再进行运 算。
北京邮电大学出版社
3.4 不同数据类型数据间的混合运算
一.自动类型转换
相关文档
最新文档