3-4、运算符和表达式

32 阅读3分钟

运算符

运算符是进行各种运算的符号,例如常用的加、减、乘、除符号,即是运算符。C语言中,除了控制语句和输入输出函数外,其他所有基本操作都作为运算符处理。

运算对象

C语言的运算符必须有运算对象。按照参与运算的运算对象的数目。运算符可分为单目运算符、双目运算符和三目运算符。其中,若单目运算符位于运算对象的前面,则称为前缀单目运算符;若单目运算符位于运算对象的后面,则称为后缀单目运算符。双目运算符均位于两个运算对象的中间。三目运算符在C语言中只有一个,即条件运算符,组成该运算符的两个符号夹在三个运算对象之间。

每一运算符都代表对运算对象的某种操作,都具有特定的运算规则。每个运算符的运算对象都有规定的数据类型,同时运算结果也有确定的数据类型。

优先级

当表达式中出现多个运算符,计算表达式的值会遇到先算哪个,后算哪个的问题,即运算符的优先级问题,C语言运算符的优先级从高到低分为15个级别。表达式的计算原则是先进行优先级高的运算。需要注意的是,括号的优先级高于任何运算,即用括号括起来的部分先计算,若括号中嵌套了括号,则内层括号优先于外层括号。

结合性

结合性是指当一个运算对象两侧的运算符具有相同的优先级时,该运算对象是先与左边的运算符结合,还是先与右边的运算符结合。从左到右的结合方式称为左结合,从右到左的结合方式称为右结合。结合性是C语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合外,其他的运算符都是左结合。

C语言运算符的优先级和结合性

优先级运算符结合性
1() [] -> .从左至右
2! ~ ++ -- *(取内容) &(取地址) +(取正) -(取负) sizeof从右至左
3*(乘) / %从左至右
4+(加) -(减)
5<< >>
6< <= > >=
7== !=
8&(位逻辑与)
9^
10|
11&&
12||
13?:从右至左
14=    +=    -=    *=    /=    %=    &=    ^=    |=    >>=    <<=从右至左
15,从左至右

注:优先级的数字越小,级别越高。

需要注意的是,少数运算符具有双重含义,具体包括:
1、+ ,在算术运算中既可以表示单目的取正运算,也可以表示双目的加法运算。
。 2、- ,在算术运算中既可以表示单目的取负运算,也可以表示双目的减法运算;在指针运算中表示双目的减法运算。
3、* ,在算术运算中表示双目的乘法运算;在指针运算中表示取内容运算。
4、& ,在位逻辑运算中表示双目的位逻辑与运算;在指针运算表表示取地址运算。