C语言的运算符范围很宽,把除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理。
按其在表达式中的作用,C的运算符可分为算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符、逗号运算符以及一些特殊的运算符。
按运算符与运算对象(操作数)的关系可将C的运算符分为单目运算符、双目运算符和三目运算符。
所谓“单目运算符”是指运算符只需要一个操作数,如++、!等;“
双目运算符”是指运算符需要两个操作数,即运算符的左右两侧都需要一个操作数,如+、−、*、/、〉〉等;
“三目运算符”是指运算符需要三个操作数,如条件运算符“?:”,这是C语言特有的。
表达式是用运算符与圆括号将操作数连接起来构成的式子。C语言的操作数包括常量、变量、函数值等。例如:表达式(a+b)*20/sin(π/2)中包括+、*、/ 等运算符,操作数包括常量20、变量a和b以及函数值sin(π/2)。
1. 在C语言中,基本的算术运算符有5个:
+(加法运算符,或正值运算符,如13+50、+50);
−(减法运算符,或负值运算符,如50−32、−32);
* (乘法运算符,如13*8);
/ (除法运算符,如23/4);
%(取模运算符,或称求余运算符)。
在使用时应注意以下几点:
(1)两个整数相除,结果仍为整数,商向下取整。实际上是整除运算。如20/3的结果为6,5/6的结果为0。但是,如果除数或被除数中有一个为负值,则舍入的方向是不固定的。例如,−5/3,有的机器上得到结果−1,有的机器得到结果−2。多数机器采取“向零取整”的方法,即−5/3=−1,取整后向零靠拢。
如果参加+、−、*、/运算的两个数中有一个数为浮点数,则结果是double型。因为自动转换后所有数都按double型进行运算。
(2)取模运算符%实际上是数学运算中的求余运算符,其两个操作对象都必须是整数。结果的符号与%左边的操作数的符号相同。如20%6的结果为2,−45%8的结果为−5,45%−8的结果为5。
(3)减法运算符还可以作为取负运算。如上面的45%−8中的“−”号就是取负运算。这时它是一个单目运算符。除此之外,其他的运算符在使用时,都需要两个操作数(或运算分量),如a+b、i*j等,所以它们都是双目运算符。
2. C语言规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级高低次序执行。在C语言中,每个运算符都有一个与之相关的优先级别。如果不同级别的多个运算符同时出现在一个表达式中,那么,具有较高优先级的运算符首先得到计算。即:按优先级从高到低的顺序依次执行。

3. 自增、自减运算符
C语言中提供了两个特殊的运算符:自增运算符“++”和自减运算符“−−”。其作用是使变量的值增1或减1,它们都是单目运算符,可以出现在运算分量的前面或后面。当出现在运算分量的前面时,如++i,−−i,称之为前缀运算符;当出现在运算分量的后面时,如i++,i−−,称之为后缀运算符。
表达式++i和i++的作用都相当于i=i+1,表示将i的内容在原来的基础上加1。
表达式−−i和i−−的作用都相当于i=i−1,表示将i的内容在原来的基础上减1。
需注意以下几点:
(1)自增运算符(++)和自减运算符(−−),只能用于变量,而不能用于常量或表达式。如55++或(i+j)++都是不合法的。
(2)++和−−是单目运算符,其优先级高于基本的算术运算符,与单目运算符−(取负)的优先级相同。其结合方向是“自右至左”。
如果有表达式−j++,j的初值为100,则该表达式应如何计算呢?j的左边是负号运算符,右边是自加运算符。按右结合性,为−(j++)。

