1、运算符分类
算术运算符
+ - * / %
关系运算符
>= > < <= != ==
逻辑运算符
!(非) &&(与) ||(或)
赋值运算符
= += -= *= /=
2、运算符优先级别
算术 > 关系 > 逻辑 > 赋值
3、附录一些琐碎的运算符
1>、自增(自减)
分类:前自增 ++i后自增 i++前自增和后自增的异同:相同:最终都是i的值加1不同:++i整体表达式的值是i+1之后的值i++整体表达式的值是i+1之前的值int i, j, k, m, a, b;i = j = 3;k = i++;m = ++j;a = i--;b = --i;结果:k = 3, m = 4, a = 3, b = 2
为什么会出现自增代码更精练自增的速度更快
学习自增要明白的几个问题1、我们编程时应该尽量屏蔽掉前自增和后自增的差别。2、自增表达式最好不要作为一个更大表达式的一部分来使用。或者说i++和++i单独成一个语句,不要把它作为一个完整复合语句的一部分来使用。如:int m = i++ + ++i + i + i++;// 这样写不但不规范,而且不可移植
// 顺序点有三个, () ; 即出现顺序点,前面的代码立即生效// 但 + 不是一个顺序点
printf("%d %d %d", i++, ++i, i);// 这种写法不好
2>、三目运算符
格式:A ? B : C
等价于:if(A)B;elseC;
顺序点:所有的语句必须在下个顺序点后的下个语句执行前生效
3>、逗号表达式
格式:A, B, C, D
功能:从左到右执行,最终表达式的值是最后一项的值。
i = (j++, ++j, j+2, j-3);从左向右,j++ -> j == 3++j -> j == 4j+2 -> j == 4j-3 -> j == 4整个表达式值为最后一项的值 j-3 == 4-3 ==1
4、例子
1>、
(-13)/4 == -4
(-13)/(-3) == 4
13 % -3 == 1
-13 % 3 == -1
-13 % -3 == -1
取余的运算对象必须是整数,结果是整除后的余数,其余数的符号与被除数相同。
2>、
C语言对真假的处理:
非零是真 -- 真 -- 1
零是假 -- 假 -- 0
m = (3 > 2) && (k = 8) ----- m == 1
上式中(k = 8)这个式子的整体值为 8
3>、
int k = 10;
int m;
m = (1 > 2) && (k = 6);
结果: m = 0; k = 10;
因为&&的运算顺序是从左向右,当左边为0时,无论右边为何止,整个式子的值为0,所以右边 k = 6 不会被执行。
m = (2 > 1) || (k = 8);
结果:m = 1;k = 10;
同理,右边不会被执行。
m = (2 > 3) || (k = 8);
结果:m = 1; k = 8;
左边为假,右边被执行。
4>、
i = 10 // 不加分号是表达式
i = 10; // 加分号是语句