运算符
运算符是进行各种运算的符号,例如常用的加、减、乘、除符号,即是运算符。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、& ,在位逻辑运算中表示双目的位逻辑与运算;在指针运算表表示取地址运算。