1初等运算符 (()圆括号),([]下标运算符),(->指向结构体成员运算符), (.结构体成员运算符)
2**(!)逻辑非运算符,自右向左**
单目运算符(~按位取反运算符)(++自增运算符)(–自减运算符)(-负号运算符)(类型:类型运算符)(*指针运算符)(&取地址运算符)(sizeof长度运算符)
双目运算符如下:
3算术运算符先乘(*)除(/)求余(%)后加(+)减(-)
4关系运算符先(< <= > >=)后(==,!=)
5(&按位与运算符)—>(^按位异地运算符)—>(|按位或运算符)
6**(&&逻辑与运算符)—>(||逻辑或运算符)
(表达式1&&表达式2)
当表达式1不成立时,逻辑值将直接返回0,而跳过表达式2,即使表达式2有重要的运算也不会执行
(表达式1||表达式2)
当表达式1成立时,逻辑值将直接返回1,而跳过表达式2,即使表达式2有重要的运算也不会执行
7条件运算符,三目运算符,自右向左( ? :)
z=x>y?x:y;
如果x>y,把x的值赋给z;
如果x<y, 把y的值赋给z;
8赋值运算符,自右向左(= += -= *= /= %= >>= <<= &= ^= |=)
8**逗号运算符(,)顺序求值运算符
int a=1,b=2,c=3;
a=(b,c+=5);
printf("%d\t%d\t%d\t",a,b.c);
结果输出8 2 8
注释:
(1)同一优先级的运算符,运算次序由结合方向决定
3*5/4<>先乘后除
-i++<>-(i++)
不同运算符要求有不同的运算对象个数,如(+)(-)为双目运算符,要求在运算符看、两侧各有一个运算对象(3+5,5-3)(++ --)运算符是单目运算符,只能在运算符的一侧出现一个运算对象(-a,i++)