5.6 ++、--操作符
5.6.1 后置++ 、--
规则:先使用,再++/--
怎么理解呢,我们来看一段代码:
#include <stdio.h> int main() { int a = 3; int b = a++; printf("a = %d, b = %d\n", a, b); int c = 5; int d = c--; printf("c = %d, d = %d\n", c, d); return 0; }
效果展示:
这里是先把 a 的值赋给 b ,再对 a 进行+1。先把 c 的值赋给 d ,再对 d 进行-1。
5.6.2 后置++、--
规则:先++/--,再使用
理解是和上面的代码反着来,我们继续来看代码:
#include <stdio.h> int main() { int a = 3; int b = ++a; printf("a = %d, b = %d\n", a, b); int c = 5; int d = --c; printf("c = %d, d = %d\n", c, d); return 0; }
效果展示:
这里是对 a 先++(因此 a 的值就改变了),再赋给 b 。先对 c --(因此 c 的值就改变了), 再赋给 d。
5.7 (类型) -- 强制类型转换
强制类型转换只是临时的一种状态,只在强制转换的那一行是所强转的类型,后面再使用时,仍然是本来的类型。
我们来看一段强转的例子:
#include <stdio.h> int main() { float a = 0.0f; int b = a; return 0; }
强转后:
#include <stdio.h> int main() { float a = 0.0f; int b = (int)a; return 0; }
这里就不会再报警告。
6、关系操作符
>
<
>=
<=
!= 用于测试”不相等“
== 用于测试”相等“
警告:在判断相等的时候一定要注意是 == 不是 = 。
7、逻辑操作符
&& 逻辑与(并且)
|| 逻辑或(或者)
逻辑操作符与位操作符不一样,一定要能区分开来。逻辑操作符只关注真假。
来看一段代码:
#include <stdio.h> int main() { int a = 3 && 5; printf("%d\n", a); return 0; }
效果展示:
都为真,打印真(真为1,假为0)。若两个数有一个是0(表示假),打印的就为假(0)。
逻辑或(||),两个数有一个为真就为真,同为假就为假。
7.1练习
看这段代码,给出答案:
#include <stdio.h> int main() { int i = 0, a = 0, b = 2, c = 3, d = 4; i = a++ && ++b && d++; printf("a = %d\nb = %d\nc = %d\nd = %d", a, b, c, d); return 0; }
因为逻辑操作符只看真假,a++是先使用再++,因此a++是 0 ,为假,为假就不执行&&后面的代码++b,d++。打印的时候 a 的值就变成了 1 ,b,c,d 的值不变,打印的就是1 2 3 4。
效果展示:
我们将 a 改为 1 ,再来看看:
#include <stdio.h> int main() { int i = 0, a = 1, b = 2, c = 3, d = 4; i = a++ && ++b && d++; printf("a = %d\nb = %d\nc = %d\nd = %d", a, b, c, d); return 0; }
这里的 a,b,c 都是非 0 数,因此&&的整个式子都走了一遍,按照前置后置++的规则得出:a = 2,b = 3,c = 3, d = 5。
效果展示:
我们再来看或者:
#include <stdio.h> int main() { int i = 0, a = 1, b = 2, c = 3, d = 4; i = a++ || ++b || d++; printf("a = %d\nb = %d\nc = %d\nd = %d", a, b, c, d); return 0; }
a是非 0 数,因此 | | 整个式子就为真,只执行a++,| |后面的式子++b,d++不执行,因此 a = 2,b = 2,c = 3,d = 4。
效果展示:
将 a 改为 0 ,又是什么结果呢?
#include <stdio.h> int main() { int i = 0, a = 0, b = 2, c = 3, d = 4; i = a++ || ++b || d++; printf("a = %d\nb = %d\nc = %d\nd = %d", a, b, c, d); return 0; }
a = 0为假,走到++b(b = 3),为真,d++不执行,打印出来为:a = 1,b = 3,c = 3,d = 4。
效果展示:
总结:&&操作符,左边为假右边不再计算;||操作符,左边为真右边不再计算。(短路)