C语言中的操作符:
优先级 符号 名称 结合性
———————————————————————
1 [] 数组取下标 左结合性
1 () 括号、函数调用 左结合性
1 . -> 取结构和联合的成员 左结合性
———————————————————————
2 ++ 自增 右结合性
2 — 自减 右结合性
2 & 取操作数地址 右结合性
2 * 间接寻址
与指针一起使用 右结合性
用于访问指针所指向的值
2 + 一元正号 右结合性
2 – 一元负号 右结合性
2 ~ 按位求反 右结合性
2 ! 逻辑非 右结合性
2 sizeof 计算所需空间(字节) 右结合性
———————————————————————
3 () 强制类型转换 右结合性
———————————————————————
算术运算符
4 * / % 乘除取余运算符 左结合性
5 + – 加减运算符 左结合性
6 << >> 移位(针对整型) 左结合性
———————————————————————
关系运算符
7 < > <= >= 关系运算符 左结合性
8 == != 判等运算符 左结合性
———————————————————————
逻辑运算符
9 & 按位与 左结合性
10 ^ 按位异或 左结合性
11 | 按位或 左结合性
12 && 逻辑与 左结合性
13 || 逻辑或 左结合性
———————————————————————
14 ?: 条件表达式 右结合性
———————————————————————
15 = *= /= %=
+= -= <<= >>=
&= ^= \= 赋值、复合赋值 右结合性
———————————————————————
16 , 逗号 左结合性
注:
* 左值: 能出现在赋值符号左边的内容,左值意味着一个位置
* 右值: 能出现在赋值符号右边的内容,右值意味着一个值
* 一般变量可以作为左值,而表达式不能
逻辑和算术移位:
正数 负数
——————————————————————
逻辑左移 低位补0高位丢失 低位补0高位丢失
算术左移 同上 同上
——————————————————————
逻辑右移 高位补0低位丢失 高位补0低位丢失
算术右移 高位补0低位丢失 高位补1低位丢失
注: 在右移中对于负数到底是采用逻辑右移还是算术右移取决于编译器(gcc采用算术右移)
类型转换:
1) 隐式转换
* 定义: 编译器可以自动处理这些转换而无需程序员介入
* 发生隐式转换的场合
a) 当算术表达式或逻辑表达式中的操作数类型不相同时(常用于算术转换)
b) 当赋值运算符右侧表达式的类型和左侧变量的类型不匹配时
c) 当函数调用中的实参类型与其对应的形参类型不匹配时
d) 当return语句中表达式的类型和函数返回值的类型不匹配时
* 常用算术转换
数据类型提升
a) int –> unsigned int –> long int –> unsigned long int
b) float –> double –> long double
c) 整型 –> 浮点型
d) 有符号数 –> 无符号数
2) 强制类型转换(显式转换)
* 定义: 允许程序员使用强制运算符执行转换
* 语法: (类型名)表达式