分类
算数逻辑操作符
+、 -、 *、 /、 %
- 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
- 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
- % 操作符的两个操作数必须为整数。返回的是整除之后的余数。
移位操作符
<< 左移操作符 >> 右移操作符
注:移位操作符的操作数只能是整数。
左移操作符
移位规则:
左边抛弃、右边补0
右移操作符
移位规则:
首先右移运算分两种:
- 逻辑移位:左边用0填充,右边丢弃
- 算术移位:左边用原该值的符号位填充,右边丢弃
注意:对于移位运算符,不要移动负数位,这个是标准未定义的。
位操作符
& //按位与
| //按位或
^ //按位异或
注:他们的操作数必须是整数。
& —— 0&0=0; 0&1=0; 1&0=0; 1&1=1;
| —— 0|0=0; 0|1=1; 1|0=1; 1|1=1;
^ —— 0^0=0; 0^1=1; 1^0=1; 1^1=0;
赋值操作符
= += -= *= /= &= ^= |= >>= <<=
可以重新赋值,也可以写成复合的效果
单目操作符
前置++(–):先++(–),在使用
例如:
#include<stdio.h>
int main()
{
int a = 3;
int b = 3;
b = ++a;
printf("%d,%d\n", a, b);
return 0;
}
结果为:4,4
++a = 3+1 = 4; b = a = 4
后置++(–):先使用,在++(–)
例如:
#include<stdio.h>
int main()
{
int a = 3;
int b = 3;
b = a++;
printf("%d,%d\n", a, b);
return 0;
}
结果为:4,3
b = a = 3; a++ = 4
关系操作符
=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”
注意书写,别因为马虎写错
逻辑操作符
&&——逻辑与运算符。如果两个操作数都非零,则条件为真。
||——逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。
逻辑与和按位与的区别
1&2----->0
1&&2---->1逻辑或和安慰或的区别
1|2----->3
1||2---->1
条件操作符
exp1 ? exp2 : exp3
若exp1的值为非0(真),则条件表达式的值=exp2;若exp1的值为0(假),则条件表达式的值=exp3
逗号表达式
exp1, exp2, exp3, …expN
- 逗号表达式,就是用逗号隔开的多个表达式。
- 逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
下标引用、函数调用和结构成员
[ ] 下标引用操作符
操作数:一个数组名 + 一个索引值
例如:
int arr[10];//创建数组
arr[9] = 10;//实用下标引用操作符。
[ ]的两个操作数是arr和9。
( ) 函数调用操作符
接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数
访问一个结构的成员
. 结构体.成员名
-> 结构体指针->成员名
优先级和结合性
- 同一优先级的运算符,次序由结合方向决定——算术运算符从左至右,赋值运算符从右至左
- 条件运算符,赋值运算符和单目运算符的结合方向是从右向左;其他运算符都为从左向右。
例如:
*和 / 的结合方向为从左向右,所以3乘以5除以4的次序是先乘后除
-(负号不是减)和++的结合方向为从右向左,所以 - i ++ = -(i++)
- 大致归纳各类优先级(由高到底开始排列)
- 下标引用、函数调用和结构成员
- 单目运算符
- 算术运算符(先乘除后加减)
- 关系运算符
- 逻辑运算符
- 条件运算符
- 赋值运算符
- 逗号运算符