理论教育 C语言应用教程:算术运算符和表达式

C语言应用教程:算术运算符和表达式

时间:2023-11-21 理论教育 版权反馈
【摘要】:表2-4基本的算术运算符说明:要求%两侧均为整型数据,符号由被除数决定。用算术运算符和括号将运算对象连接起来,符合C语言规则的式子,称为算术表达式。C语言规定了运算符的优先级和结合性。负值运算符的优先级别高于算术运算符。前面已提到,算术运算符的结合方向为自左至右。

C语言应用教程:算术运算符和表达式

1.算术运算符

C语言提供了5个基本的算术运算符,如表2-4所示。

表2-4 基本的算术运算符

说明:

(1)要求%两侧均为整型数据,符号由被除数决定。例如,-7 % 4的值为-3,7%-4的值为3。

(2)两个整数相除结果为整数,如1/2的结果为0,舍弃小数部分。如果除数或被除数中有一个为负值,则多数编译系统采取“向零取整”的方法,即-5/3= -1,取整后向零靠拢。

(3)参加运算的两个数中有一个数为实型数据,则结果是double型,因为所有的实型数据都按double型进行运算。例如,1.0/2 =0.5。

(4)字符型数据可以和数值型数据混合运算。因为字符型数据是按照其ASCII码(整数)形式在内存中存储的。

2.算术表达式

(1)算术表达式的定义。用算术运算符和括号将运算对象(也称操作数)连接起来,符合C语言规则的式子,称为算术表达式。运算对象包括常量、变量和函数等。

例如,a * b/c-1.5+'a'是一个合法的算术表达式。

(2)运算符的优先级与结合性。C语言规定了运算符的优先级和结合性。在表达式求值时,按运算符的优先级别、高低次序执行。遵循的原则是先乘除后加减,如a-b*c,相当于a-(b*c)。

“*,/,%”为同一级别,“+,-”为同一级别,“*,/,%”优先级高于“+,-”。如果一个运算对象两侧的运算符优先级别相同,则按规定的结合方向处理。C语言规定了各种运算符的结合方向(结合性),算术运算符的结合方向为自左至右,即先左后右。例如,a-b+c,相当于(a-b) +c。

运算符的优先级可描述如下:

以后可以看到有些运算符的结合方向为自右至左,即右结合性(例如,赋值运算符)。附录B列出了所有运算符以及它们的优先级别和结合性。

(3)类型转换。如果一个运算符两侧的数据类型不同,先自动进行类型转换,使两者具有同一种类型,然后再进行运算。详细内容,将在下一节介绍。

(4)取负值运算符。C语言的取负值运算符为“-”(负号)。它是一元运算符,例如,-a,-x。

负值运算符的优先级别高于算术运算符。例如:

运算顺序应为:①→⑤

(5)自增、自减运算符。 自增、自减运算符的作用是使变量的值增1或减1。例如:

++ i,--i(在使用i之前,先使i的值加(减)1)

i ++,i-- (在使用i之后,使i的值加(减)1)(www.daowen.com)

++i和i ++的作用相当于i = i + 1。但++i和i ++的不同之处在于,++i是先执行i=i+1后再使用i的值;而i ++是先使用i的值后再执行i = i+1。如果i的原值等于3,则:

1)j=++i; i的值先增1,再将i值赋给j,结果是j的值为4,i的值也为4。

2)j =i ++; 先将i值赋给j,再将i的值增1,结果是j的值为3,i的值为4。

例如:

输出结果为:4。

若改为:

则输出结果为:3。

说明:

(1)自增运算符(++)和自减运算符(--)只能用于变量,不能用于常量或表达式,如2++或(a+b) ++都是不合法的。因为2是常量,常量的值不能改变。 (a+b) ++也不可能实现,假设a + b的值为3,那么自增后得到的4无变量可供存放。

(2) ++和--的结合方向是自右至左。前面已提到,算术运算符的结合方向为自左至右。例如:

输出结果为:-3。

说明:-i ++相当于-(i ++)。先取出i的值使用,输出-i的值-3,然后使i加1为4。

自增(减)运算符常用于循环语句中,使循环变量自动加1;也可用于指针变量,使指针指向下一个地址。这些将在以后的章节中介绍。

(3)若表达式中包含自增、自减运算符,可给表达式的运算带来灵活性,但容易给人造成一些混淆的问题。因此,使用自增(减)运算符要小心谨慎。例如:

先取出i的原值3作为表达式中i的值;因此先进行3个i相加,得9赋给y。然后再对i进行3次自加,i的值为6。

若改为:

先对i进行两次自加,i的值为5,然后进行y=5+5+( ++i)的运算,此时再对i进行自加,i的值为6,故y的值为16。

(4) C语言中有的运算符为一个字符,有的运算符由两个字符组成。C编译系统在处理时尽可能多地(自左至右)将若干个字符组成一个运算符(在处理标识符、关键字时也按同一原则处理),如i +++ j,将解释为(i++) +j而不是i+( ++j)。

使用++和--时会出现一些人们“想不到”的副作用,初学者要慎用。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈