C语言逻辑运算符与短路特性解析:||、&& 运算详解
本文将详细解释 C 语言中逻辑运算符 ||(逻辑或)和 &&(逻辑与)的短路特性,并通过示例代码来演示如何利用这些特性提高代码效率。
示例代码:
int i = 0;
int j = 0;
if (1 || i++ && j++) printf("i1=%d,j1=%d\n", i, j);
if (0 || i++ && i++) printf("i2=%d,j2=%d\n", i, j);
if (1 || ++i && ++j) printf("i3=%d,j3=%d\n", i, j);
if (0 || ++i && ++j) printf("i4=%d,j4=%d\n", i, j);
代码解析:
-
if (1 || i++ && j++):- 逻辑运算符
||(逻辑或)拥有短路特性。只要第一个条件为真(非 0),就不会再判断后面的条件。 - 由于第一个条件 1 为真,不会执行后面的
i++和j++,结果为真,将打印 "i1=0,j1=0"。
- 逻辑运算符
-
if (0 || i++ && i++):- 逻辑或的短路特性同样适用。
- 由于第一个条件 0 为假,需要继续判断后面的条件。
- 条件
i++ && i++中,根据短路特性,只有前面一个条件i++为真(非 0)时,才会判断后面的条件i++。 - 因为 i 的值在这个过程中会递增,所以第一个条件
i++为真,i 的值会变为 1,但是第二个条件i++为假,i 的值不会再递增。 - 最终结果为假,将不会执行
printf语句,所以不会打印任何内容。
-
if (1 || ++i && ++j):- 第一个条件 1 为真,不会执行后面的条件。
- 结果为真,将打印 "i3=1,j3=0"。注意,这里的 i 和 j 的值在递增之前被打印出来了。
-
if (0 || ++i && ++j):- 第一个条件 0 为假,需要继续判断后面的条件。
- 条件
++i && ++j中,根据短路特性,只有前面一个条件++i为真(非 0)时,才会判断后面的条件++j。 - 由于前面一个条件 0 为假,不满足条件,不会执行后面的条件,结果为假,将不会执行
printf语句,所以不会打印任何内容。
总结:
代码的执行结果将是:
i1=0, j1=0
i3=1, j3=0
通过这个例子,可以更加清晰地理解 C 语言中逻辑运算符的短路特性,并学会如何利用这些特性来提高代码的效率。
原文地址: https://www.cveoy.top/t/topic/buKc 著作权归作者所有。请勿转载和采集!