ch03运算符和表达式.ppt

上传人:xin****828 文档编号:6339457 上传时间:2020-02-23 格式:PPT 页数:48 大小:452.55KB
返回 下载 相关 举报
ch03运算符和表达式.ppt_第1页
第1页 / 共48页
ch03运算符和表达式.ppt_第2页
第2页 / 共48页
ch03运算符和表达式.ppt_第3页
第3页 / 共48页
点击查看更多>>
资源描述
2020年2月23日星期日 第3章运算符和表达式 C 实用教程 2 表达式 在C 中 运算符和表达式是实现数据操作的两个重要组成部分 表达式是由变量 常量 函数等通过一个或多个运算符组合而成的式子 表达式中 变量 常量 函数等都是运算符的运算对象 称为操作数 例 2 x a sin b 20 C 实用教程 3 运算符 根据运算符的操作数的个数不同 可将其分为单目 一元 对一个操作数运算双目 二元 对二个操作数运算三目 三元 对三个操作数运算P 580表E 1C 常用运算符一览表 C 操作符的优先级与结合性 C 实用教程 5 目录 3 1算术运算3 2赋值运算3 3sizeof运算符3 4逗号运算符3 5自增和自减3 6位运算 C 实用教程 6 3 1算术运算 数学中 算术运算包括加 减 乘 除 乘方及开方等 在C 中 算术运算是由算术运算符或库函数实现的 P 576常用的C 库函数及类库 C 实用教程 7 算术运算符的优先级和结合性 C 实用教程 8 3 1 1算术运算符 1 除法运算 两个整数相除 结果为整数 否则为实数 2 求余运算 要求参与运算的两个操作数都是整型 其结果是两个数相除的余数 3 负值的求余运算结果的符号与运算符左边的操作数的符号一致 5 2 22 3 05 2 0 2 5 float 5 2 2 55 2 1 5 2 12 3 2 2 3 2 C 实用教程 9 示例 取模运算的使用 includeusingnamespacestd intmain for inti 0 i 50 i if i 5 0 cout n cout i t return0 C 实用教程 10 3 1 2优先级和结合性 单目运算符的优先级最高 其次是乘 除和求余 最后是加 减 运算符的结合性是指运算符和操作数的结合方式 它有从左至右和从右至左两种 只有当两个同级运算符共用一个操作数时 结合性才会起作用 例如 c a b操作数a的两边的运算符相同 则先进行c a操作除1目 3目 赋值运算符外的操作符的结合性均是从左到右 C 实用教程 11 3 1 3数据类型转换 C 采用两种方法对数据类型进行转换 一种是自动转换 另一种是强制转换 自动转换是将数据类型按从低到高的顺序自动进行转换 由于这种转换不会丢失有效的数据位 因而是安全的 强制转换是在程序中通过指定数据类型来改变 将一个变量从其定义的类型人为地改变成为另一种类型 由于这种转换可能会丢失有效的数据位 因而是不安全的 C 实用教程 12 类型转换的顺序 C 实用教程 13 1 自动转换 字符型 整型 实型之间可以进行混合运算 其中字符型数据以ASC 码的十进制数参与运算 运算时 不同类型的数据要先转换成同一类型 然后进行运算 转换规则 类型转换由系统自动完成 转换总是朝表达数据能力更强的方向 并且转换总是逐个运算符进行的 例如 inti 10 longl 4 floatf 5 0 doubled 1 25 则 i a 2 d f l运算结果为double型的108 25 C 实用教程 14 2 强制转换 功能 将一个表达式的值转换成某个类型格式 类型名 表达式 说明 括号必须有 但是 如果表达式是单个操作数 其括号可以省 例如 int x int x y 一般 系统对操作数自动进行类型转换 但如果 a b要求a和b都是整型 如果不是 必须先进行转换 int a b int a int b转换后只得到一个中间变量 被转换的变量的类型不变 C 实用教程 15 3 1 4代数式和表达式 为了能让C 程序进行数值计算 还必须将代数式写合法的C 表达式 1 注意书写规范 2 注意加圆括号 3 注意数据类型 4 注意符号 C 实用教程 16 3 1算术运算3 2赋值运算3 3sizeof运算符3 4逗号运算符3 5自增和自减3 6位运算 C 实用教程 17 3 2赋值运算符 在C 中 赋值运算是使用赋值运算符 来操作的 它是使用最多的双目运算符 赋值运算符 的作用是将赋值符右边操作数的值存储到左边操作数所在的内存空间 赋值符 左边的操作数必须是左值 赋值表达式的值和类型是左值的值和类型 C 实用教程 18 3 2 1左值和右值 左值 L value 能出现在赋值表达式左边的表达式 左值表达式具有存放数据的空间 并且存放是允许的 例如 inta 3 右值 只能出现在赋值表达式右边的表达式 说明 左值既可以出现在赋值运算符的左边 又可以出现在右边例如 inta constintb 6 a b 8 b 8 a 4 8 32 a 2 a是左值 b 8为右值 error b是常量 只能作右值 a 4是左值表达式 可以被赋值 error 32是常量 只能作右值 C 实用教程 19 3 2 2数值截取和数值溢出 赋值表达式的值和类型是左值的值和类型 在赋值表达式中 当右值的数据类型低于左值的数据类型时 C 会自动进行数据类型的转换 若右值的数据类型高于左值的数据类型且不超过左值的范围时 C 会自动进行数值截取 如果一个数值超出一个数据类型所表示的数据范围 则会出现数值溢出 C 实用教程 20 数值溢出 进行算术运算时 很可能溢出结果 发生溢出是由于一个变量被赋予一个超出其数据类型表示范围的数值 数值溢出不会引起编译错误 只要分母不为0就不会引起除0运行故障 但会使运行结果发生偏差 例如 shortintweight 42896 cout weight endl 得到的结果是42896的补码 22640 即 42896 65536 22640 C 实用教程 21 例Ex OverFlow 一个整型溢出的例子 includeusingnamespacestd intmain shortnTotal nNum1 nNum2 nNum1 1000 nNum2 1000 nTotal nNum1 nNum2 cout nTotal n return0 C 实用教程 22 3 2 3复合赋值 C 实用教程 23 3 2 3复合赋值 10种复合赋值运算符都是在赋值符 之前加上其他运算符而构成的 在复合赋值运算符之间不能有空格 复合赋值运算符的优先级和赋值符的优先级一样 在C 的所有运算符中只高于逗号运算符 而且复合赋值运算符的结合性也和赋值符一样 是从右至左 C 实用教程 24 3 2 4多重赋值 多重赋值是指在一个赋值表达式中出现两个或更多的赋值符 赋值表达式几乎可以出现在程序的任何地方 由于赋值运算符的等级比较低 因此这时的赋值表达式两边要加上圆括号 C 实用教程 25 includeusingnamespacestd intmain inta 2 b c d 3 cout a b 5 4 c 2 d endl return0 示例 可以用a b 5 4 c 2 d cout a endl 代替 C 实用教程 26 3 1算术运算3 2赋值运算3 3sizeof运算符3 4逗号运算符3 5自增和自减3 6位运算 C 实用教程 27 3 3sizeof运算符 sizeof运算符的目的是返回操作数所占的内存空间大小 字节数 由于同一类型的操作数在不同的计算机中占用的存储字节数可能不同 因此sizeof运算的结果有可能不一样 sizeof sizeof C 实用教程 28 3 1算术运算3 2赋值运算3 3sizeof运算符3 4逗号运算符3 5自增和自减3 6位运算 C 实用教程 29 3 4逗号运算符 逗号运算符 把多个表达式连接起来 构成一个逗号表达式在计算时 C 将从左至右逐个计算每个表达式 最终整个表达式的结果是最后计算的那个表达式的类型和值 即表达式n的类型和值 逗号运算符 的优先级是最低的 必要时注意加圆括号 以使逗号表达式的运算次序先于其他表达式 表达式1 表达式2 表达式3 表达式n C 实用教程 30 3 4逗号运算符 例 如果a 5 表达式a 3 5 a 4的值为即 a 3 5 a 4注意 表达式a 3 5 a 4与a 3 5 a 4 的区别例 如果a 5 表达式a 3 5 a 4 的值为逗号表达式可以嵌套 例 如果a 5 表达式 a 3 5 a 4 a 5的值为即 a 3 5 a 4这时的a 15所以 a 5就等于20 60 20 C 实用教程 31 3 1算术运算3 2赋值运算3 3sizeof运算符3 4逗号运算符3 5自增和自减3 6位运算 C 实用教程 32 3 5自增和自减 单目运算符自增 和自减 为左值加1或减1提供一种非常有效的方法 自增 和自减 运算符既可放在左值的左边 也可以出现在左值的右边 分别称为前缀运算符和后缀运算符 前缀运算符 后缀运算符和其他的运算符组合在一起 在求值次序上就会产生根本不同 C 实用教程 33 自增 i 先加1后使用i 先使用后加1例 i 3 j1 i j1 4相当于执行 i i 1 j1 i j2 i j2 3相当于执行 j2 i i i 1 自减 i 先减1后使用i 先使用后减1例 i 3 j1 i j1 2相当于执行 i i 1 j1 i j2 i j2 3相当于执行 j2 i i i 1 3 5 1一般用法 C 实用教程 34 3 5 2前缀和后缀的区别 由于前增量操作返回的值即修改之后的变量值 所以返回的仍然是一个左值 例如 inta 3 a ok a是左值 a的值是5由于后增量操作返回的值是原先a的值 而后a的值已经发生变化 故返回的不能是当前a 只能是过去的a值 不能是左值 例如 inta 3 a error a 不是左值 C 实用教程 35 注意事项 1 前缀自增或自减表达式的结果仍为一个左值 而后缀自增或自减表达式的结果不是左值 对于等级相同的单目运算符来说 哪一个运算符靠近操作数 就和哪个运算符先结合 2 自增或自减运算符是两个 或两个 的一个整体 中间不能有空格 如果有多于两个 或两个 连写的情况 编译时会首先识别自增或自减运算符 3 在有自增或自减运算符的混合运算中 一要注意次序 二要注意左值对应于一块内存空间这个特性 4 在cout语句中的自增或自减运算中 不同编译器的处理方式也是不一样的 C 实用教程 36 操作符的识别 编译器采用贪吃法则如果有多于两个 或两个 连写的情况 则编译首先识别前面两个 或 为增量或减量操作符 inta 3 b 5 c c a b ok c a b 错 理解为a bc a b ok a bc a b 错 理解为a bc a b 错 理解为a b C 实用教程 37 3 1算术运算3 2赋值运算3 3sizeof运算符3 4逗号运算符3 5自增和自减3 6位运算 C 实用教程 38 3 6位运算 C 实用教程 39 3 6 1位逻辑运算 位与操作 00000110c a b为 00001110 14 比较a b C 实用教程 40 3 6 1位逻辑运算 位异或操作 将两个操作数每一位做异或操作 若两个操作数相等 值为0 若两个操作数不等 值为1 inta 12 00001100intb 6 00000110c a b 00001010 10位反操作 将一个操作数的每一位取反 0变1 1变0 inta 12 00001100b a 11110011 C 实用教程 41 左移操作 对于有符号数 若最高位是1 则高位挤进去1 最高位是0 则高位挤进去0 对于无符号数 则一律高位挤进去0 shortinta 2 1111111111111110a a 1 1111111111111111 1unsignedshortintb 65535 1111111111111111b b 1 0111111111111111 32767 3 6 2移位运算 C 实用教程 42 例Ex BitOP 位运算实例 include include 由于后面用到setw格式算子 故添加此头文件usingnamespacestd voidout2 unsignedn 定义一个函数 将一个无符号整型数n按二进制数输出 unsignednBits sizeof n 8 计算一个整型变量所占的位数while nBits 0 cout nBits 1 C 实用教程 43 intmain unsignedbits sizeof unsigned 8 cout 本机无符号整型的位数为 bits endl cout out2 1234 调用函数cout cout setw bits endl setw用来设置下一个对象的输出宽度cout out2 7 调用函数cout cout setw bits endl cout out2 1234 7 调用函数return0 例Ex BitOP 位运算实例 C 实用教程 44 程序运行结果如下 C 实用教程 45 3 6 3位运算的应用 位运算常用来测试某位 或将某位置1 清零或取反等 C 实用教程 46 小结 运算符表达式算术表达式赋值表达式逗号表达式 C 实用教程 47 实验2 P 495 数据类型 运算符和表达式 C 实用教程 48 作业 P 501 2 4 5 6 7 4 5 9
展开阅读全文
相关资源
相关搜索

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


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

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


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