第3章C++程序设计(第2版).ppt_第1页
第3章C++程序设计(第2版).ppt_第2页
第3章C++程序设计(第2版).ppt_第3页
第3章C++程序设计(第2版).ppt_第4页
第3章C++程序设计(第2版).ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

第3章 运算符和表达式 本章主要内容 3 1基本运算符3 2表达式3 3运算符优先级和结合性3 4类型转换 3 1基本运算符 3 1 1算术运算符3 1 2关系运算符3 1 3逻辑运算符3 1 4位运算符3 1 5赋值运算符3 1 6逗号运算符3 1 7三目运算符3 1 8自增 自减运算符3 1 9sizeof运算符 运算符是表示进行何种运算的符号 又称为操作符 运算量包含常量 变量 函数等 又称为操作数 3 1 1算术运算符 C 语言提供了7个算术运算符 正 负 其中包括单目运算符和双目运算符 C 中含有以下单目算术运算符 负数运算符 正数运算符 取正 与 取负 运算符用于对操作数取正和取负操作 取正的操作结果与操作数相同 取负操作的是将操作数变成原值的相反数 C 中含有以下双目算术运算符 加法运算符 减法运算符 乘法运算符 除法运算符 求模运算符 也称为求余运算符 注意 乘法和除法运算符号与数学里面的不同 和 做正负号使用时 为单目运算符 做加减运算时 为双目运算符单目运算符优先级高于双目运算符 注意 特别注意表达式中两个整型数相除的情况 运算符有一个特点 就是当 左右两边数据均为整数时 得到的结果也是整数 所以1 2值为0 参见教材33页 如果希望得到值是0 5的话就要将表达式改成1 0 2或1 2 0 注意 运算符两边的运算数必须都是整型数据 如12 5 6为非法 且余数的符号由被除数的符号决定 如 5 4值为 1 5 4值为1 3 1 2关系运算符 关系运算符完成两个操作数的比较运算 C 中提供了6个关系运算符 大于 大于等于 等于 不等于 它们都是双目运算符 运算的结果为一整数 当关系成立时 其运算结果为整数1 逻辑真 当关系不成立时 其运算结果为整数0 逻辑假 关系运算的结果可作为一个整数参与表达式的运算 关系运算符的两个操作数可以是任意的基本类型的数据 由于实数在计算机内进行运算和存储时 都会产生误差 在进行两个实数的比较时 不能采用精确的比较 直接比较两数的大小 3 1 3逻辑运算符 逻辑运算符把各个运算的变量 或常量 连接起来组成一个逻辑表达式 包括逻辑非 逻辑与 逻辑或 三种逻辑运算符 其中 逻辑非是单目运算符 其只要求有一个运算量 逻辑与和逻辑或都是双目运算符 要求有两个运算量 当操作数 变量 为真时 逻辑非运算的结果则为假 对于逻辑与运算符 只有当两个操作数都为真时 逻辑与运算的结果则为真 对于逻辑或操作符只要有一个操作数为真 则逻辑或运算的结果就为真 逻辑运算符的运算优先级为 高于 高于 的优先级高于算术运算符 和 的优先级比关系运算符低 3 1 4位运算符 C 中提供了按位与 按位或 按位异或 移位运算符 和取反运算符 其中 统称为按位逻辑运算符 1 按位逻辑运算符1 取反运算符 是一元运算符 它是对其操作数进行二进制逐位取反运算 若二进制位为0 则取反后为1 若二进制位为1 则取反后为0 2 按位逻辑与 是二元运算符 参加运算的两个操作数按二进制位进行 与 运算 若两个数相应的二进制位都为1 则该位的结果值为1 否则为0 3 按位逻辑或 也是二元运算符 参加运算的两个操作数按二进制位进行 或 运算 若两个数相应的二进制位有一个为1 则该位的结果值为1 否则为0 4 按位异或 也称XOR运算符 其运算规则是 将两个操作数逐位进行运算 若对应位不同 则该位结果为1 否则为0 2 移位运算符移位运算符是二元运算符 其包括左移运算符和右移运算符两种 1 左移运算符的使用格式是operation m 其中m为整数 其作用相当于将operation的各个二进制位右移m位 当左移时 对于带符号数 最高位表示符号 可能会因为低位的1或0移到最高位 最终改变操作数的符号 当进行右移操作时 操作数右移m个二进制位后 左边移出的空位用符号位补齐 最高位始终补和原来的最高位相同的数 位运算符的运算优先级为 括弧中运算符的优先级相同 高于 高于 高于 高于 3 1 5赋值运算符 C 语言提供了两类赋值运算符 即基本赋值运算符和复合赋值运算符 基本赋值运算符为 复合赋值运算符有 赋值运算符作用是将一个数值或将一个表达式的值赋给一个变量 1 赋值运算符都是二元运算符 与其他二元运算符不同 赋值操作具有右结合性 即当表达式中有多个赋值运算符时 其是从右向左结合的 2 赋值运算符左边的操作数必须是非const的左值 3 在实际编写程序过程中 我们经常会用到一些复合赋值运算符 如 分别表示将操作数加上 乘以某一数值再将结果赋给操作数本身 4 多次连续赋值操作 赋值表达式的返回值是赋值后左边变量的值 可以将一个赋值表达式作为另一个赋值表达式的右操作数 实现连续的赋值 5 赋值运算符的优先级是同级的 3 1 6逗号运算符 在C 中 逗号 既是运算符 又是分隔符 逗号运算符用来将两个表达式连接起来 逗号表达式的一般表达形式为 逗号运算符是双目运算符 取其右操作数的值作为运算结果 逗号运算符的优先级最低 3 1 7三目运算符 在C 中 条件运算符由 和 两个符号组成 要求有3个操作对象 所以也叫它三目运算符 它是C 中唯一的三目运算符 它的一般形式为 以下是关于条件运算符的几点说明 1 通常情况下 表达式1是关系表达式或逻辑表达式 用于描述条件表达式中的条件 表达式2和表达式3可以是常量 变量或表达式 2 条件表达式的执行顺序为 先求解表达式1 若值为非0 表示条件为真 则求解表达式2 此时表达式2的值就作为整个条件表达式的值 若表达式1的值为0 表示条件为假 则求解表达式3 表达式3的值就是整个条件表达式的值 3 条件表达式的优先级别仅高于赋值运算符 而低于前面遇到过的所有运算符 4 条件运算符的结合方向为 自右至左 5 表达式1 表达式2 表达式3的类型可以不同 此时条件表达式值的类型为它们中较高的类型 3 1 8自增 自减运算符 在C 中 提供了两个具有给变量赋值运算作用的算术运算符 即自增运算符 自减 这两种运算符都是一元运算符 自增 自减运算符有前置和后置两种形式 1 前置运算 先自加 减 后引用 例如 i或 i 表示在使用i之前先使i加1或减1 2 后置运算 先引用后自加 减 例如 i 或i 表示使用i之后再使i加1或减1自增运算符和自减运算符只能用于变量 不能用于表达式或者常量 自增 自减运算符的优先级是同级的 结合方向都是自右向左的 自增自减运算符常用于循环语句中 使得循环变量自动加1或减1 也用于指针变量 使得指针指向下一个或上一个地址 3 1 9sizeof运算符 C 中 每种类型的变量都占用一定大小的存储单元 该存储单元的大小和变量的类型以及程序运行所在的机器有关 在程序中 若要获取变量占用的存储单元大小 应该使用sizeof运算符来获取 sizeof运算符用于测试某种数据类型或表达式的类型在内存中所占的字节数 它是一个一元运算符 其语法格式为 sizeof 或sizeof 3 2表达式 表达式一般是由运算符 圆括号和操作数构成 经过运算应有一个某种类型的确定的值 操作数可以是常量 变量或函数等 使用不同的运算符可以构成不同类型的表达式 如算术表达式 赋值表达式 关系表达式 逻辑表达式等 表达式的书写 操作数 运算符 圆括号之间可以加空格 也可以不加空格 1 左值表达式和右值表达式在C 中 左值就是在赋值中放在赋值运算符左边的值 可以是一个引用到对象的表达式 通过左值我们可以取出该对象的值 右值就是在赋值中放在赋值运算符右边的值 与左值不同的是右值只能出现在赋值的右边 不能出现在赋值语句的左边 2 算术表达式由算术运算符 位运算符和操作数组成的符合语法规则的序列称为算术表达式 算术表达式的值为整型或实型 3 赋值表达式赋值运算符就是 它的作用是将一个数据赋给一个变量 当然也可以将一个表达式赋给一个变量 赋值表达式要求赋值运算符左边必须是左值 其功能是用右值表达式的值修改左值 赋值表达式一般形式为 赋值表达式的一般求解过程是 先求赋值运算符右侧的 表达式 的值 然后赋值给赋值运算符左侧的变量 C 语言中 使用复合赋值表达式后 使语句表达简练 对赋值表达式说明以下几点 1 赋值表达式的值是其左操作数的值 其结果的类型为左操作数的类型 2 赋值操作具有低优先级 在赋值操作上加圆括号是必需的 因为赋值运算符的优先级是低于除逗号运算符以外的任何操作符 3 赋值操作具有右结合性 当表达式含有多个赋值运算符时 从右向左结合 4 赋值表达式的值类型为左值类型 4 关系表达式关系表达式是用关系运算符连接两个数值表达式形成的式子 关系表达式的一般形式为 关系表达式的求值结果只有两个逻辑值 0或1 0表示逻辑假 不成立 1表示逻辑真 成立 关系运算符 用来判定两个操作数是否相等 若两个操作数相同 则结果为真 否则为假 5 逻辑表达式逻辑表达式类似于关系表达式 是用逻辑运算符把两个表达式连接起来的式子 其一般形式为 逻辑操作的操作数类型与关系运算相同 其运算结果用整数表示 当逻辑关系成立时 其运算结果为真 反之 为假 6 逗号表达式逗号表达式是由逗号运算符和操作数组成的符合语法规则的序列 其一般的形式为 逗号表达式按从左到右的顺序依次求出各表达式的值 并把最后一个表达式的值作为整个逗号表达式的值 7 表达式语句在C 语言中 任何一个表达式后加上分号 就构成了表达式语句 其一般格式为 8 空语句空语句是什么也不执行的语句 空语句仅由一个分号组成 在程序中空语句可用来作空循环体 3 3运算符优先级和结合性 所谓优先级是指在同一个表达式中 多个运算符相邻出现时 总是先处理优先级高的运算符 而不管它们位置上的前后关系 运算符的结合性是指相邻的几个优先级相同的运算符的运算顺序 结合性也称为结合方向 有从左到右和从右到左两种 左结合性 运算对象先与左面的运算符结合 也就是从左到右运算 右结合性 运算对象先与右面的运算符结合 也就是从右到左运算 在对表达式求值时 如果在一个运算对象两侧的运算符优先级相同 则按规定的运算符结合性处理 注意 当一个表达式中包含多个运算符时 先进行优先级高的运算 再进行优先级低的运算 而对于多个优先级相同的运算符 运算的顺序就要看运算符的结合性了 3 4类型转换 3 4 1自动类型转换3 4 2强制类型转换3 4 3赋值转换3 4 4逻辑表达式求值的优化 3 4 1自动类型转换 在C 中 如果编译器看见一个表达式或者函数使用了不合适的类型 通常会进行自动的类型转换 即自动类型转换 这是指系统自动将表达式中的操作数转换成所需类型的值 一个表达式中不同数据类型的数据进行混合运算时 C 语言将两个不同类型的操作数自动转换成同一类型的操作数 然后再进行运算 这就是所谓自动类型转换 各种基本数据类型之间的自动类型转换规则如图3 1所示 图3 1不同数据类型的自动转换规则 转换规则是将低精度类型的数据转换为高精度类型的数据 因此在数据转换过程中 数据的精度不会损失 在处理表达式的过程中 并不是将低优先级的变量直接转换成高优先级的变量 而是在表达式处理的过程中 按照需要进行变换 即只有在需要时才进行转换 3 4 2强制类型转换 强制类型转换 也称显示类型转换 是由程序员在程序中用类型转换运算符明确指明的转换操作 自动类型转换是系统自动进行的 其转换的步骤是按照确定的方向进行的 也可以在变量或常量的前面加标识符来实现强制类型转换 强制类型转换的一般形式为 或者 3 4 3赋值转换 赋值表达式中 当赋值运算符左值表达式的类型与右值表达式的类型不同 且数据类型兼容时 将进行类型转换 C 语言先计算出右值表达式的值 然后将其转换为左值的类型后赋给左值 转换的准则为 1 将精度低的变量赋值给精度高的变量时 数值保持不变 2 将精度高的变量赋值给精度低的变量时 可能出现部分数值丢失 例如 当把一个实型的值赋给一个整型变量时 将丢失实型值的小数部分 整型变量只是得到实型值的整数部分 当两边的数据类型不同时 则在进行赋值运算前自动把赋值运算符右边的值转换为与左边变量类型相同的值 然后再把这个值赋给左边的变量 3 4 4逻辑表达式求值的优化 逻辑表达式求值的优化 在逻辑表达式求值时 一旦能确定其值 则不必再逐步求值 本章习题 教材第41页的第1 2

温馨提示

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

评论

0/150

提交评论