第三章运算符与表达式 3、1C运算符简介 运算符:狭义的运算符是表示各种运算的符号 C语言运算符丰富,范围很宽,把除了控制语句 和输入输出以外的几乎所有的基本操作都作为 运算符处理,所以C语言运算符可以看作是操作 符。C语言丰富的运算符构成C语言丰富的表达 式(是运算符就可以构成表达式)。运算符丰 富、表达式丰富、灵活。 在C语言中除了提供一般高级语言的算术、关系 逻辑运算符外,还提供赋值符运算符,位操作」 运算符、自增自减运算符等等。甚至数组下标 函数调用都作为运算符
第三章 运算符与表达式 • 3、1 C运算符简介 • 运算符:狭义的运算符是表示各种运算的符号。 • C语言运算符丰富,范围很宽,把除了控制语句 和输入/输出以外的几乎所有的基本操作都作为 运算符处理,所以C语言运算符可以看作是操作 符。C语言丰富的运算符构成C语言丰富的表达 式(是运算符就可以构成表达式)。运算符丰 富、表达式丰富、灵活。 • 在C语言中除了提供一般高级语言的算术、关系、 逻辑运算符外,还提供赋值符运算符,位操作 运算符、自增自减运算符等等。甚至数组下标, 函数调用都作为运算符
第三章运算符与表达式 C的运算符有以下几类: 1.算术运算符 十, 2.关系运算符 !=) 3.逻辑运算符 (!88.) 4.位运算符 (<少 1∧8.) 5.赋值运算符 (=及其扩展赋值运算符) 6.条件运算符 7.逗号运算符 (,) 8.指针运算符 (*和8) 9.求字节数运算符 (sizeof) 10.强制类型转换运算符(类型) 11.分量运算符 12.下标运算符 ([]) 13.其它 (如函数调用运算符()) 本章主要介绍算术运算符(包括自增自减运算 符)、赋值运算符、逗号运算符,其它运算符 在以后相关章节中结合有关内容陆续进行介绍
第三章 运算符与表达式 • C的运算符有以下几类: • 本章主要介绍算术运算符(包括自增自减运算 符)、赋值运算符、逗号运算符,其它运算符 在以后相关章节中结合有关内容陆续进行介绍。 ++,--
第三章运算符与表达式 3、2算术运算符和算术表达式 1、算术运算符 +(加法运算符。如3+5) (减法运算符或负值运算符。如5-2,-3) ☆(乘法运算符。如35) /(除法运算符。如5/3,50/3) %(模运算符或求余运算符,%要求两侧均为整型数 据。如7%4的值为3)。 除了负值运算符单目运算符外,其它都是双目运算符 说明:(1)两个整数相除的结果为整数,如5/3的结 果为1,舍去小数部分。但是如果除数或被除数中有 个为负值,则舍入的方向是不固定的,多数机器采用 “向0取整”的方法(实际上就是舍去小数部分,注意 是四合五入
第三章 运算符与表达式 • 3、2 算术运算符和算术表达式 • 1、算术运算符 • +(加法运算符。如3+5) • -(减法运算符或负值运算符。如5-2,-3) • *(乘法运算符。如3*5) • /(除法运算符。如5/3,5.0/3) • %(模运算符或求余运算符,%要求两侧均为整型数 据。如7%4的值为3)。 • 除了负值运算符-单目运算符外,其它都是双目运算符。 • 说明:(1)两个整数相除的结果为整数,如5/3的结 果为1,舍去小数部分。但是如果除数或被除数中有一 个为负值,则舍入的方向是不固定的,多数机器采用 “向0取整”的方法(实际上就是舍去小数部分,注意: 不是四舍五入)
网第三章运算符与表达式 -5/3=-1.6666 (a)向0取整 结果:-1 -1012 (b)向小值方向取整 结果:-2 2-1012 整除的舍入方向
第三章 运算符与表达式
第三章运算符与表达式 (2)如果参加+,,运算的两个数有一个为实数,则 结果为 double型,因为所有实数都按 double型进行计 算。 (3)求余运算符%,要求两个操作数均为整型,结 果为两数相除所得的余数。求余也称为求模。一般情 况,余数的符号与被除数符号相同。 例如:-8%5=3;8%-5=3 2、算术表达式 算术表达式:用算术运算符和括号将运算对象(也称 操作数)连接起来的、符合C语法规则的式子,称为 算术表达式。运算对象可以是常量、变量、函数等
第三章 运算符与表达式 • (2)如果参加+,-,*,/运算的两个数有一个为实数,则 结果为double型,因为所有实数都按double型进行计 算。 • (3)求余运算符%,要求两个操作数均为整型,结 果为两数相除所得的余数。求余也称为求模。一般情 况,余数的符号与被除数符号相同。 • 例如:-8%5=-3;8%-5=3 • 2、算术表达式 • 算术表达式:用算术运算符和括号将运算对象(也称 操作数)连接起来的、符合C语法规则的式子,称为 算术表达式。运算对象可以是常量、变量、函数等
第三章运算符与表达式 例如,下面是一个合法的C算术表达式。 a*b/c-1.5+2a 注意: C语言算术表达式的书写形式与数学表达式的书写形 式有一定的区别 (1) C语言算术表达式的乘号(*)不能省略。 例如:数学式b2-4ac,相应的C表达式应该写成:b*b aco (2)C语言表达式中只能出现字符集允许的字符。 例如,数学πr2相应的C表达式应该写成:PIrr。 (其中PI是已经定义的符号常量) (3)C语言算术表达式不允许有分子分母的形式。 例如a+b)/(c+d)
第三章 运算符与表达式 • 例如,下面是一个合法的C算术表达式。 • a*b/c-1.5+’a’ • 注意: • C语言算术表达式的书写形式与数学表达式的书写形 式有一定的区别: • (1) C语言算术表达式的乘号(*)不能省略。 例如:数学式b 2 -4ac,相应的C表达式应该写成:b*b- 4*a*c。 • (2) C语言表达式中只能出现字符集允许的字符。 例如,数学πr2相应的C表达式应该写成:PI*r*r。 (其中PI是已经定义的符号常量) • (3) C语言算术表达式不允许有分子分母的形式。 例如,(a+b)/(c+d)
第三章运算符与表达式 (4)C语言算术表达式只使用圆括号改变运算的优先 顺序(不要指望用{)。可以使用多层圆括号,此时 左右括号必须配对,运算时从内层括号开始,由内向 外依次计算表达式的值 3、(算术)运算符的优先级与结合性(P233附录Ⅰ) C语言规定了进行表达式求值过程中,各运算符的 “优先级”和“结合性”。 (1)C语言规定了运算符的“优先级”和“结合性” 在表达式求值时,先按运算符的“优先级别”高低次 序执行。 如表达式:a-bc等价于a-(b*c),“*”运算符优先级 高于“-”运算符
第三章 运算符与表达式 • (4)C语言算术表达式只使用圆括号改变运算的优先 顺序(不要指望用{}[])。可以使用多层圆括号,此时 左右括号必须配对,运算时从内层括号开始,由内向 外依次计算表达式的值。 • 3、(算术)运算符的优先级与结合性(P.233附录IV) • C语言规定了进行表达式求值过程中,各运算符的 “优先级”和“结合性” 。 • (1)C语言规定了运算符的“优先级”和“结合性” 。 在表达式求值时,先按运算符的“优先级别”高低次 序执行。 • 如表达式:a-b*c等价于a-(b*c), “*”运算符优先级 高于“-”运算符。 •
第三章运算符与表达式 (2)如果在一个运算对象两侧的运算符的优 先级别相同,则按规定的“结合方向”处理 例如:a-btc,到底是(a-b)+c还是a-(b+c)?(b 先与a参与运算还是先于c参与运算?) 查附录IV可知:+运算优先级别相同,结合 性为“自左向右”,即就是说b先与左边的a结 合。所以a-b+c等价于(a-b)+co 左结合性(自左向右结合方向):运算对象先 与左面的运算符结合 右结合性(自右向左结合方向):运算对象先 与右面的运算符结合
第三章 运算符与表达式 • (2)如果在一个运算对象两侧的运算符的优 先级别相同,则按规定的“结合方向”处理。 • 例如:a-b+c,到底是(a-b)+c还是a-(b+c)?(b 先与a参与运算还是先于c参与运算?) • 查附录IV可知:+/-运算优先级别相同,结合 性为“自左向右” ,即就是说b先与左边的a结 合。所以a-b+c等价于(a-b)+c。 • 左结合性(自左向右结合方向):运算对象先 与左面的运算符结合。 • 右结合性(自右向左结合方向):运算对象先 与右面的运算符结合
③利第三幸运算符与表达式 ·(3)在书写多个运算符的表达式时,应当注意 各个运算符的优先级,确保表达式中的运算 符能以正确的顺序参与运算。对于复杂表达 式为了清晰起见可以加圆括号“()”强制 规定计算顺序。 3、3赋值运算符和赋值表达式 赋值运算符、赋值表达式 赋值运算符:赋值符号“=”就是赋值运算符。 赋值表达式:由赋值运算符组成的表达式称 为赋值表达式。一般形式: 〈变量〉〈赋值符〉〈表达式
第三章 运算符与表达式 • (3)在书写多个运算符的表达式时,应当注意 各个运算符的优先级,确保表达式中的运算 符能以正确的顺序参与运算。对于复杂表达 式为了清晰起见可以加圆括号“()”强制 规定计算顺序。 • 3、3 赋值运算符和赋值表达式 • 1、赋值运算符、赋值表达式 • 赋值运算符:赋值符号“=”就是赋值运算符。 • 赋值表达式:由赋值运算符组成的表达式称 为赋值表达式。一般形式: • 〈变量〉〈赋值符〉〈表达式〉
第三章运算符与表达式 赋值表达式的求解过程:将赋值运算符右侧的表达式 的值赋给左侧的变量,同时整个赋值表达式的值就是 刚才所赋的值。赋值的含义:将赋值运算符右边的表 达式的值存放到左边变量名标识的存储单元中。 例如:x=-10y;执行赋值运算(操作),将10+y的值 赋给变量x,同时整个表达式的值就是刚才所赋的值。 说明: (1)赋值运算符左边必须是变量,右边可以是常量 变量、函数调用或常量、变量、函数调用组成的表达 例如:x=10y=x+10y=func(都是合法的赋值表达式 (2)赋值符号“=”不同于数学的等号,它没有相等 的含义。(“=”相等)例如:C语言中x=x+1是合法 的(数学上不合法),它的含义是取出变量x的值加1 再存放到变量x中
第三章 运算符与表达式 • 赋值表达式的求解过程:将赋值运算符右侧的表达式 的值赋给左侧的变量,同时整个赋值表达式的值就是 刚才所赋的值。赋值的含义:将赋值运算符右边的表 达式的值存放到左边变量名标识的存储单元中。 • 例如:x=10+y; 执行赋值运算(操作),将10+y的值 赋给变量x,同时整个表达式的值就是刚才所赋的值。 • 说明: • (1) 赋值运算符左边必须是变量,右边可以是常量、 变量、函数调用或常量、变量、函数调用组成的表达 式。 • 例如:x=10 y=x+10 y=func()都是合法的赋值表达式。 • (2)赋值符号“=”不同于数学的等号,它没有相等 的含义。(“==”相等)例如:C语言中x=x+1是合法 的(数学上不合法),它的含义是取出变量x的值加1, 再存放到变量x中