双竖杠是C语言中的逻辑或运算符,对应的符号为||,它用于对两个表达式的布尔值进行或运算,在程序的条件判断、循环控制等场景中应用非常广泛。这个运算符的运算结果只有两种,要么为真,要么为假,是C语言基础运算符中非常重要的一员。

双竖杠的基本运算规则
逻辑或运算符||的运算规则遵循布尔逻辑中的或运算逻辑,具体规则如下:
- 如果参与运算的两个表达式中,至少有一个表达式的结果为真,那么整个||运算的结果就为真
- 只有当两个表达式的结果都为假时,整个||运算的结果才为假
在C语言中,真和假的定义为:非0值代表真,0代表假。运算结果中,1代表真,0代表假。
代码示例演示运算过程
下面通过一段简单的C语言代码来展示双竖杠的具体运算效果:
#include <stdio.h>
int main() {
int a = 5;
int b = 0;
int c = 10;
// 第一个表达式为真,第二个表达式为假,或运算结果为真
int result1 = (a > 3) || (b > 5);
printf("result1的结果:%dn", result1); // 输出1
// 两个表达式都为假,或运算结果为假
int result2 = (a < 3) || (b > 5);
printf("result2的结果:%dn", result2); // 输出0
// 两个表达式都为真,或运算结果为真
int result3 = (a > 3) || (c == 10);
printf("result3的结果:%dn", result3); // 输出1
return 0;
}
双竖杠的短路特性
双竖杠运算符还有一个非常重要的特性叫做短路求值。具体表现为:如果第一个表达式的运算结果已经能够确定整个||运算的结果,那么就不会再执行第二个表达式的运算。
比如当第一个表达式的结果为真时,不管第二个表达式是什么结果,整个或运算的结果都为真,此时程序就不会去计算第二个表达式的值,这个特性可以帮助我们避免一些不必要的运算,甚至避免一些运行时错误。
下面用代码演示短路特性:
#include <stdio.h>
int main() {
int a = 5;
int b = 0;
// 第一个表达式a>3为真,第二个表达式b/0不会被计算,不会触发除零错误
int result = (a > 3) || (b / 0 > 0);
printf("result的结果:%dn", result); // 输出1
return 0;
}
双竖杠和单竖杠的区别
很多初学者会把双竖杠||和单竖杠|搞混,这两个运算符的区别很大:
| 对比项 | 双竖杠|| | 单竖杠| |
|---|---|---|
| 运算符类型 | 逻辑或运算符 | 按位或运算符 |
| 运算对象 | 布尔值(非0和0) | 整数的二进制位 |
| 短路特性 | 有短路特性 | 没有短路特性,两边表达式都会执行 |
| 运算结果 | 只有0和1两种结果 | 结果是按位或运算后的整数值 |
下面用代码展示两者的区别:
#include <stdio.h>
int main() {
int a = 3; // 二进制0011
int b = 5; // 二进制0101
int logic_or = a || b;
int bit_or = a | b;
printf("逻辑或结果:%dn", logic_or); // 输出1,因为a和b都非0
printf("按位或结果:%dn", bit_or); // 输出7,0011 | 0101 = 0111即7
return 0;
}
双竖杠的常见使用场景
双竖杠最常见的使用场景是在条件判断语句中,比如if语句、while循环的条件部分,用来组合多个判断条件:
#include <stdio.h>
int main() {
int score = 85;
// 判断分数是否大于等于90或者小于等于60
if (score >= 90 || score <= 60) {
printf("分数属于优秀或者不及格范围n");
} else {
printf("分数属于中等范围n");
}
return 0;
}
另外在循环条件中也可以使用双竖杠,比如当满足多个条件中的任意一个时就继续循环:
#include <stdio.h>
int main() {
int num = 0;
// 当num小于5或者num大于10时继续循环
while (num < 5 || num > 10) {
printf("当前num的值:%dn", num);
num++;
}
return 0;
}