一. 算术运算符——自增、自减运算符
(请见运算符与表达式一)
二. 关系运算符
用于比较运算,包括:>、<、==、>=、<=、!=
在if表达式中会用到关系运算符,请见下面实例:
1. 在if表达式中用了赋值运算符=,这种情况下编译器不会报错,打印出A! B!,在后续写代码中,可以把数值写在前面。
2. 在if表达式后加了分号,编译器不会报错,打印出A! B!,这种情况在代码数量较多的情况下很难发现错误,应该尽量避免。
3. 正确的写法,打印出B!。
4. 正确的写法,打印出B!,对比3,此例只有不满足if表达式时才会打印B!,而例三不管if表达式是什么,都会打印B!
三. 逻辑运算符——短路逻辑与、短路逻辑或
实例:
结果:i = 1,j = 0
原因是:&&是短路逻辑与
短路与:第一个表达式为0,不会再执行之后的表达式
短路或:第一个表达式为1,不会再执行之后的表达式
四. 位操作运算符
(请见运算符与表达式三)
五. 赋值运算符
用于赋值运算,分为简单复制(=)、复杂算术赋值(+=、-=、*=、/=、%=)、复合位运算赋值(&=、|=、^=、>>=、<<=)
六. 条件运算符
表达式1?表达式2:表达式3
表达式1正确,结果为表达式2,否则为表达式3
七. 逗号运算符
在C语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。
例1:
inta1,a2,b=2,c=7,d=5;
a1=(++b,c--,d+3);
a2=++b,c--,d+3;
对于给a1赋值的代码,有三个表达式,用逗号分开,所以最终的值应该是最后一个表达式的值,也就是(d+3)的值,为8,所以a1的值为8。
对于给a2赋值的代码,也是有三个表达式,这时的三个表达式为a2=++b、c--、d+3,(这是因为赋值运算符比逗号运算符优先级高)所以最终表达式的值虽然也为8,但a2=4(第2行代码运算完时,b=3,即第3行代码运行时,b的值为4)。
例2:inta[2],x=2,y=5;
a[0]=(x+3,y++,x++);那么最终结果是:a[0]=2x=3 y=6;
为何a[0]=2:因为(x++)是运算之后再自加
a[1]=(x++,x+3,x+7);那么最终结果是:a[1]=11,x=4
第一反应,我以为a[1]=10,就是3+7;其实是错的。
计算a[0]的时候,x++,此时x=3;计算a[1]的时候,x++,此时x=4,因此a[1]=4+7=11
不信你改成a[1]=(x++,x+7,x+3);调试一下,逗号表达试结果是7,就是4+3,说明经过一个逗号,x已经自加变成4了。
八. 指针运算符
用于取内容(*)和取地址(&)运算
九. 求字节运算符
sizeof(详情请见数据类型二)
十. 运算符优先级
同一优先级的运算符,运算次序由结合方向所决定,简单记就是:!>算术运算符>关系运算符>&&>||>赋值运算符
一般情况下,在不清除优先级的情况下,加上括号就可凸显优先级。