注:本文为 "C 语言 | 运算符" 相关合辑。
略作重排,未整理去重。
如有内容异常,请看原文。
C 语言中的运算符大全(内附优先级表)
「已注销」 2021-04-16 13:17:24
一、C 语言中的运算符总述
-
表达式定义:由一个或多个操作数(变量、常量、字面值)及运算符构成,且符合 C 语言语法规则的式子。
-
表达式的值:表达式经计算得到的结果。
-
左值与右值
- 左值:可被写入数据的内存单元(如变量)。
- 右值:可被读取数据的内存单元(如变量、常量、字面值)。
-
运算符完整分类
运算符类别 具体形式 算术运算符 +、-、*、/、%、++、--关系运算符 >、<、==、!=、>=、<=逻辑运算符 &&、`赋值运算符 基础: =;算术复合:+=、-=、*=、/=、%=;位复合:&=、`位运算符 &、`条件运算符 ?:(三元运算符)逗号运算符 ,指针运算符 &(取地址)、*(间接寻址)求字节运算符 sizeof特殊运算符 ()、[]、. -
运算符三大属性
- 优先级:运算符执行的先后次序,数值越高越先执行。
- 结合性:优先级相同时,表达式的运算顺序由结合性确定。
- 目数:参与运算的操作数个数,分为一元、二元、三元运算符。
二、各类运算符详细解析
(一)算术运算符
1. 基础算术运算符(+、-、*、/、%)
-
均为二元运算符,运算规则与数学基本规则一致,结果为右值。
-
类型规则 :运算结果类型由操作数类型决定,两个
int类型运算结果为int(除法为整除)。cint a = 10, b = 3; double c = a/b; // 结果为 3.000000(int 整除) c = (double)a/b; // 结果为 3.333333(强制类型转换) c = 1.0*a/b; // 结果为 3.333333(隐式类型转换) -
特殊规则 :
/和%的右操作数不能为 0;%要求操作数均为整数,结果符号由左操作数决定。cprintf("%d\n",5%3); // 2 | printf("%d\n",5%-3); // 2 printf("%d\n",-5%3); // -2| printf("%d\n",-5%-3);// -2 -
跨语言差异:C 语言负数取余向 0 取整,Python 向负无穷取整,导致结果不同。
2. 自增自减运算符(++、--)
-
均为一元运算符,
--规则与++完全一致。- 前置:
++i,先自增 1,再取值参与运算。 - 后置:
i++,先取值参与运算,再自增 1。
cint i=0; printf("%d\n",++i); // 1,i 最终为 1 i=0; printf("%d\n",i++); // 0,i 最终为 1 - 前置:
-
使用建议:单个表达式中,同一变量仅执行一次自增/自减操作,避免未定义行为。
(二)赋值运算符
1. 简单赋值(=)
-
二元运算符,优先级仅高于逗号运算符,结合性自右向左 。
cint a,b; b = a = 10; // 先 a=10,后 b=a,均为 10
2. 复合赋值(op=)
op为算术/位运算符,是简化写法,a += 3等价于a = a + 3,同理-=、*=、&=等。
(三)关系运算符(>、<、==、!=、>=、<=)
- 均为二元运算符,结合性自左向右。
- 优先级 :
<、>=、<=高于==、!=;整体低于算术运算符。 - 结果规则 :运算结果为整型,
1表示真,0表示假。
(四)逻辑运算符(&&、||、!)
1. 基础规则
-
逻辑判定:非 0 为真,0 为假;运算结果
1为真,0为假。 -
运算规则
运算符 类型 规则 示例 &&二元 全真为真,一假为假 真 && 假→假 ` ` 二元 !一元 逻辑取反,真变假,假变真 !0→1、!5→0 cint num; scanf("%d",&num); printf("%d\n",num>=1&&num<=99); // 判断[1,99] printf("%d\n",num<1||num>99); // 判断非[1,99]
2. 短路特性
-
||:左操作数为真时,直接判定结果为真,右操作数不执行。 -
&&:左操作数为假时,直接判定结果为假,右操作数不执行 。cint a=1,b=1; printf("%d\n",++a||++b); // 1,a=2、b=1(短路) int a=-1,b=-1;printf("%d\n",++a&&++b); //0,a=0、b=-1(短路)
(五)条件运算符(?:)
-
C 语言唯一的三元运算符 ,语法:
操作数 1 ? 操作数 2 : 操作数 3。 -
运算规则:操作数 1 为真,结果为操作数 2;操作数 1 为假,结果为操作数 3。
cint num; scanf("%d",&num); printf("%s\n",num%2?"奇数":"偶数"); // 判断奇偶并输出
(六)位运算符
1. 位逻辑运算符(&、|、~、^)
-
运算对象为二进制位,无短路行为,左右操作数均执行。
运算符 规则 异或特性 &对应位均 1 为 1,否则 0 - ` ` 对应位有 1 为 1,否则 0 ~按位取反,0 变 1、1 变 0 - ^对应位不同为 1,相同为 0 a^b^b = a(左结合,b 值不变时异或两次还原原值;若 b 是变量且在运算中被改变,等式不成立) -
异或运算规则:
0 ⊕ 0 → 0 0 \oplus 0 \rightarrow 0 0⊕0→0
1 ⊕ 1 → 0 1 \oplus 1 \rightarrow 0 1⊕1→0
0 ⊕ 1 → 1 0 \oplus 1 \rightarrow 1 0⊕1→1
1 ⊕ 0 → 1 1 \oplus 0 \rightarrow 1 1⊕0→1
2. 位移运算符(<<、>>)
-
通常操作无符号整型,操作数均为非负整数,无短路行为。
cint a = 0x7fffffff; // 最大 int 正数 a <<= 1; // 左移 1 位,变为负数 printf("%d\n",a); // 输出负数结果
(七)逗号运算符(,)
-
二元运算符,优先级最低 ,结合性自左向右。
-
运算规则:依次执行所有操作数,整个表达式结果为最后一个操作数 的值。
cint num; num = 100,200; // 赋值优先级高,num=100 num = (100,200); // 括号提升优先级,num=200 num = (100,200,300);// 结果为最后一个,num=300
三、C 语言中的类型转换
-
显式类型转换(强制转换) :语法
(目标类型) 操作数,手动指定转换类型。c(double)10; // 整型 10 转为浮点型 int a=20; (double)a; // 变量 a 转为浮点型 -
隐式类型转换(自动转换) :编译器自动完成,向数据范围更大的类型靠拢 。
- 算术运算要求操作数类型一致,整型与浮点型运算时,整型先提升为
double。
- 算术运算要求操作数类型一致,整型与浮点型运算时,整型先提升为
四、运算符优先级表



注 :本文内容基于河北师范大学丁盟老师课堂笔记整理。
上文截图中缺少口诀,可参考下文。
C 语言运算符优先级(记忆口诀)
稚枭天卓 于 2015-08-12 15:09:10 发布
本文系统阐述 C 语言中各类运算符及其优先级规则,并通过口诀辅助学习者完成记忆。内容覆盖从数组下标运算符至逗号运算符的 15 个优先级层级的运算符,明确各运算符的名称、使用形式及结合方向。
优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 () 圆括号 (表达式)/函数名(形参表) . 成员选择(对象) 对象.成员名 -> 成员选择(指针) 对象指针->成员名 2 - 负号运算符 -表达式 右到左 单目运算符 (类型) 强制类型转换 (数据类型)表达式 ++ 自增运算符 ++变量名/变量名++ 单目运算符 -- 自减运算符 --变量名/变量名-- 单目运算符 * 取值运算符 *指针变量 单目运算符 & 取地址运算符 &变量名 单目运算符 ! 逻辑非运算符 !表达式 单目运算符 ~ 按位取反运算符 ~表达式 单目运算符 sizeof 长度运算符 sizeof(表达式) 3 / 除 表达式/表达式 左到右 双目运算符 * 乘 表达式*表达式 双目运算符 % 余数(取模) 整型表达式%整型表达式 双目运算符 4 + 加 表达式+表达式 左到右 双目运算符 - 减 表达式-表达式 双目运算符 5 << 左移 变量<<表达式 左到右 双目运算符 >> 右移 变量>>表达式 双目运算符 6 > 大于 表达式>表达式 左到右 双目运算符 >= 大于等于 表达式>=表达式 双目运算符 < 小于 表达式<表达式 双目运算符 <= 小于等于 表达式<=表达式 双目运算符 7 == 等于 表达式==表达式 左到右 双目运算符 != 不等于 表达式!=表达式 双目运算符 8 & 按位与 表达式&表达式 左到右 双目运算符 9 ^ 按位异或 表达式^表达式 左到右 双目运算符 10 | 按位或 表达式|表达式 左到右 双目运算符 11 && 逻辑与 表达式&&表达式 左到右 双目运算符 12 || 逻辑或 表达式||表达式 左到右 双目运算符 13 ?: 条件运算符 表达式 1?表达式 2:表达式 3 右到左 三目运算符 14 = 赋值运算符 变量=表达式 右到左 /= 除后赋值 变量/=表达式 *= 乘后赋值 变量*=表达式 %= 取模后赋值 变量%=表达式 += 加后赋值 变量+=表达式 -= 减后赋值 变量-=表达式 <<= 左移后赋值 变量<<=表达式 >>= 右移后赋值 变量>>=表达式 &= 按位与后赋值 变量&=表达式 ^= 按位异或后赋值 变量^=表达式 |= 按位或后赋值 变量|=表达式 15 , 逗号运算符 表达式,表达式,... 左到右 按从左至右的顺序依次运算 说明
同一优先级的运算符,其运算次序由结合方向确定。
记忆口诀
括号成员第一; // 括号运算符 <> 成员运算符. ->
全体单目第二; // 所有的单目运算符比如++、 --、 +(正)、 -(负) 、指针运算*、&
乘除余三,加减四; // 这个"余"是指取余运算即 %
移位五,关系六; // 移位运算符:<< >> ,关系:> < >= <= 等
等于(与)不等排第七; // 即== 和!=
位与异或和位或; // 这几个都是位运算: 位与(&)异或(^)位或(|)
"三分天下"八九十;
逻辑或跟与; // 逻辑运算符:|| 和 &&
十二和十一; // 注意顺序:优先级(||) 底于 优先级(&&)
条件高于赋值, // 三目运算符优先级排到13 位只比赋值运算符和","高
逗号运算级最低! // 逗号运算符优先级最低
改进版
- 括号成员居首;// 括号运算符 <>、成员运算符 . ->
- 所有单目次之;// 全部单目运算符,如 ++、--、+(正)、-(负)、指针运算 *、&
- 乘除取余为三,加减为四;// "余" 指代取余运算,即 %
- 移位为五,关系为六;// 移位运算符:<<、>>;关系运算符:>、<、>=、<= 等
- 等于与不等位列第七;// 即 == 和 !=
- 位与、异或、位或;// 均为位运算:位与 (&)、异或 (^)、位或 (|)
- 依次占据第八、九、十位;
- 逻辑与、逻辑或;// 逻辑运算符:&& 和 ||
- 分别为第十一位、第十二位;// 注意优先级次序:|| 优先级低于 &&
- 条件运算符优先级高于赋值运算符;// 三目运算符优先级为第十三位,仅高于赋值运算符与逗号运算符
- 逗号运算符优先级最低!
逻辑运算符 &&、|| 的短路运算机制
bulebin 2018-02-22 10:52:18
本文系统解析逻辑运算符&&与||的短路运算原理、应用价值及实践方法,结合多组 C 语言实例说明如何利用短路特性优化代码执行效率,规避逻辑异常。
一、短路运算的定义
- 逻辑运算符基础规则
表达式 1 || 表达式 2:任意一个为真,整体为真;全假为假。表达式 1 && 表达式 2:所有为真,整体为真;一假为假。
- 短路运算特征 :若左侧表达式结果已能确定整体结果,右侧后续表达式不再执行 。
||短路规则:表达式 1 为真 → 整体为真,表达式 2~n 不执行;表达式 1 为假 → 依次判断后续。&&短路规则:表达式 1 为假 → 整体为假,表达式 2~n 不执行;表达式 1 为真 → 依次判断后续。
二、短路运算的应用价值
- 风险规避 :避免在
&&/||表达式中直接嵌入赋值、自增/自减等带副作用的操作,防止因短路导致操作未执行,结果与预期不符。 - 性能优化:将能快速判定整体结果的表达式置于左侧,通过短路减少不必要的运算,降低处理器开销。
三、短路运算的实践方法(实例解析)
实例 1:|| 的基础短路(左侧为真)
c
#include <stdio.h>
int main() {
int a=1,b=2,c=-3,d=-1;
printf("before: a=%d b=%d c=%d d=%d\n",a,b,c,d);
d = (a+1>0) || (++b>0) || (c-4)>0; // 左侧为真,短路后续
printf("after: a=%d b=%d c=%d d=%d\n",a,b,c,d); // b=2、c=-3、d=1
return 0;
}
分析 :a+1>0为真,触发短路,++b和c-4>0未执行,b、c值不变。
实例 2:|| 的连续判断(左侧为假)
c
#include <stdio.h>
int main() {
int a=-1,b=2,c=-3,d=-1;
printf("before: a=%d b=%d c=%d d=%d\n",a,b,c,d);
d = (a+1>0) || (++b>0) || (c-4)>0; // 左侧假,执行下一个
printf("after: a=%d b=%d c=%d d=%d\n",a,b,c,d); // b=3、c=-3、d=1
return 0;
}
分析 :a+1>0为假,执行++b>0(结果为真),触发短路,c-4>0未执行,b自增为 3。
实例 3:|| 的副作用规避(强制执行所有操作)
c
#include <stdio.h>
int main() {
int a=1,b=2,c=-3,d=-1,A=-1,B=-1,C=-1;
printf("before: a=%d b=%d c=%d d=%d\n",a,b,c,d);
A=a+1>0; B=++b>0; C=c-4>0; // 先计算所有结果,再逻辑运算
d = A || B || C;
printf("after: a=%d b=%d c=%d d=%d\n",a,b,c,d); // b=3、d=1
return 0;
}
分析:先独立计算所有带副作用的操作,再进行逻辑运算,确保所有操作均执行。
实例 4:&& 的基础短路(左侧为假)
c
#include <stdio.h>
int main() {
int a=-1,b=2,c=-3,d=-1;
printf("before: a=%d b=%d c=%d d=%d\n",a,b,c,d);
d = (a+1>0) && (++b>0) && (c-4)>0; // 左侧为假,短路后续
printf("after: a=%d b=%d c=%d d=%d\n",a,b,c,d); // b=2、c=-3、d=0
return 0;
}
分析 :a+1>0为假,触发短路,++b和c-4>0未执行,b、c值不变。
实例 5:&& 的连续判断(左侧为真)
c
#include <stdio.h>
int main() {
int a=1,b=-2,c=-3,d=-1;
printf("before: a=%d b=%d c=%d d=%d\n",a,b,c,d);
d = (a+1>0) && (++b>0) && (c-4)>0; // 左侧真,执行下一个
printf("after: a=%d b=%d c=%d d=%d\n",a,b,c,d); // b=-1、c=-3、d=0
return 0;
}
分析 :a+1>0为真,执行++b>0(结果为假),触发短路,c-4>0未执行,b自增为-1。
实例 6:&& 的副作用规避(强制执行所有操作)
c
#include <stdio.h>
int main() {
int a=-1,b=2,c=-3,d=-1,A=-1,B=-1,C=-1;
printf("before: a=%d b=%d c=%d d=%d\n",a,b,c,d);
A=a+1>0; B=++b>0; C=c-4>0; // 先计算所有结果,再逻辑运算
d = A && B && C;
printf("after: a=%d b=%d c=%d d=%d\n",a,b,c,d); // b=3、d=0
return 0;
}
分析:先独立计算所有带副作用的操作,再进行逻辑运算,确保所有操作均执行。
详解 C 语言中运算符 || 和 && 的短路机制
d0ublecl1ck_ 2025-07-12 08:25:01
在 C 语言中,逻辑或||与逻辑与&&是组合多条件表达式的重要运算符,二者均具备短路机制------这是优化代码执行效率、规避运行时错误的关键特性,本文将深入剖析该机制的原理、规则及工程化应用场景。
一、逻辑或运算符(||)的短路机制
1. 基本定义
- 二元运算符,语法:
condition1 || condition2。 - 运算规则:任意条件为真,整体为真;全假为假。
2. 短路规则
- 若左侧条件
condition1为真 ,直接判定整体为真,右侧条件condition2不计算; - 仅当左侧条件
condition1为假 时,才计算右侧条件condition2:condition2为真 → 整体为真;condition2为假 → 整体为假。
- 价值:避免无效运算,提升程序执行效率。
二、逻辑与运算符(&&)的短路机制
1. 基本定义
- 二元运算符,语法:
condition1 && condition2。 - 运算规则:所有条件为真,整体为真;一假为假。
2. 短路规则
- 若左侧条件
condition1为假 ,直接判定整体为假,右侧条件condition2不计算; - 仅当左侧条件
condition1为真 时,才计算右侧条件condition2:condition2为真 → 整体为真;condition2为假 → 整体为假。
- 价值 :与
||互补,同样通过减少无效运算优化性能。
三、短路机制的工程化应用
应用 1:避免空指针引用(最常用场景)
访问指针成员/调用指针函数前,先校验指针是否为空,利用短路机制防止空指针访问崩溃。
c
// 若 ptr 为空,左侧为真,短路右侧 ptr->data,避免空指针引用
if (ptr == NULL || ptr->data == 42) {
// 业务逻辑
}
// 若 ptr 为空,左侧为假,短路右侧 ptr->data,避免空指针引用
if (ptr != NULL && ptr->data == 42) {
// 业务逻辑
}
应用 2:条件赋值优化
利用短路机制简化条件赋值,减少if-else分支语句的使用,让代码更简洁。
c
// 若 condition1 为真,短路 condition2,直接赋值 value1
int result = (condition1 || condition2) ? value1 : value2;
// 若 condition1 为假,短路 condition2,直接赋值 value2
int result = (condition1 && condition2) ? value1 : value2;
应用 3:简化复杂条件判断
在多条件组合判断中,将快速判定结果的条件置于左侧,通过短路减少运算开销,提升代码执行效率。
c
// 若用户是管理员,左侧为真,短路后续条件,直接执行逻辑
if (userIsAdmin || (userIsLoggedIn && hasPermission)) {
// 管理员/有权限用户的业务逻辑
}
四、典型例题解析(短路机制综合应用)
例题 1

解析 :x++逻辑值为真,触发||短路机制,y++和++z均不执行;逻辑真等价于1,z += 1,最终结果为6,7,9。
例题 2

解析:
y++初始值为 0(逻辑假),触发&&短路机制,++z不执行;- 假
|| ++x,左侧为假,执行++x,x自增为 2; - 最终结果:
x=2,y=1(后置自增),z=2。
五、总结
- 短路机制是
||和&&的固有特性,||左侧为真时短路,&&左侧为假时短路; - 短路机制的价值是优化执行效率 (减少无效运算)和规避运行时错误(如空指针引用);
- 工程实践中需注意:避免在短路区域嵌入带副作用的操作(赋值、自增/自减、函数调用),防止逻辑异常;
- 熟练掌握短路机制,可让代码更简洁、高效、健壮,是 C 语言程序员的必备技能。
【C 语言】搞懂 |、||、&、&& 的差异
hinacha_ 2024-01-04 16:37:44
本文系统解析 C 语言中位运算符|、&与逻辑运算符||、&&的工作原理、使用规则、差异及常见错误,结合实例说明工程应用场景,重点强调短路行为对代码效率与逻辑正确性的影响。
一、引言
|(位或)、||(逻辑或)、&(位与)、&&(逻辑与)是 C 语言高频运算符,但其功能、行为差异易被初学者混淆:
|、&是位运算符,操作二进制位,无短路行为;||、&&是逻辑运算符 ,操作逻辑值,具备短路行为。
精准掌握四类运算符的差异,是编写正确、高效条件语句的基础。
二、四类运算符逐一解析
(一)|(位或)运算符
1. 定义
- 二元位运算符 ,按二进制位 执行或运算,无短路行为,左右操作数均会执行。
- 位运算规则:对应位至少有 1 个为 1,结果位为 1;全 0 为 0。
- 逻辑判断规则:非 0 为真、0 为假,
a | b等价于"a 真 或 b 真"。
2. 代码示例
c
int a = 1; // 二进制:0001(真)
int b = 0; // 二进制:0000(假)
if (a | b) { // 位或结果:0001(非 0,真)
printf("The result is true\n"); // 执行该语句
}
3. 注意事项
- 本质是位运算,非专门的逻辑运算符,无短路特性,效率低于
||; - 逻辑判断中,仅当需要同时执行左右操作数 时使用,否则优先选
||。
(二)||(逻辑或)运算符
1. 定义
- 二元逻辑运算符 ,操作逻辑值 ,具备短路特性,是逻辑判断的首选运算符。
- 运算规则:一真为真、全假为假。
- 短路规则:左侧为真时,右侧操作数不执行。
2. 代码示例
c
int a = 0; // 逻辑假
int b = 1; // 逻辑真
if (a || b) { // 左侧假,执行右侧;右侧真,整体真
printf("The result is true\n"); // 执行该语句
}
3. 注意事项
- 逻辑判断的最优选择,短路特性可大幅提升效率;
- 禁止在右侧嵌入带副作用的操作(赋值、自增/自减、函数调用),防止因短路未执行。
(三)&(位与)运算符
1. 定义
- 二元位运算符 ,按二进制位 执行与运算,无短路行为,左右操作数均会执行。
- 位运算规则:对应位均为 1,结果位为 1;有 0 为 0。
- 逻辑判断规则:非 0 为真、0 为假,
a & b等价于"a 真 且 b 真"。
2. 代码示例
c
int a = 1; // 二进制:0001(真)
int b = 0; // 二进制:0000(假)
if (a & b) { // 位与结果:0000(0,假)
printf("The result is true\n");
} else {
printf("The result is false\n"); // 执行该语句
}
3. 注意事项
- 本质是位运算,非专门的逻辑运算符,无短路特性,效率低于
&&; - 逻辑判断中,仅当需要同时执行左右操作数 时使用,否则优先选
&&。
(四)&&(逻辑与)运算符
1. 定义
- 二元逻辑运算符 ,操作逻辑值 ,具备短路特性,是逻辑判断的首选运算符。
- 运算规则:全真为真、一假为假。
- 短路规则:左侧为假时,右侧操作数不执行。
2. 代码示例
c
int a = 0; // 逻辑假
int b = 1; // 逻辑真
if (a && b) { // 左侧假,短路右侧;整体假
printf("The result is true\n");
} else {
printf("The result is false\n"); // 执行该语句
}
3. 注意事项
- 逻辑判断的最优选择,短路特性可大幅提升效率;
- 禁止在右侧嵌入依赖执行的副作用操作;
- 复杂表达式中,用括号 明确优先级(如
(a && b) || c),避免逻辑错误。
三、四类运算符差异总结
1. 分类差异
| 类别 | 运算符 | 本质 | 短路行为 | 操作对象 | 逻辑判断优先级 |
|---|---|---|---|---|---|
| 或运算系列 | ` | ` | 位运算符 | 无 | 二进制位 |
| ` | ` | 逻辑运算符 | 有 | ||
| 与运算系列 | & |
位运算符 | 无 | 二进制位 | 低 |
&& |
逻辑运算符 | 有 | 逻辑值 | 高 |
2. 运算规则差异
- 或运算 :
|按位或(无短路),||逻辑或(左侧真短路),最终逻辑结果一致,执行效率不同; - 与运算 :
&按位与(无短路),&&逻辑与(左侧假短路),最终逻辑结果一致,执行效率不同。
3. 工程使用原则
- 纯逻辑判断 :优先使用
||、&&,利用短路特性提升效率,规避副作用风险; - 需执行所有操作 :若要求左右操作数均执行(如带副作用),使用
|、&; - 位运算场景 :操作二进制位时(如寄存器操作、数据加密),必须使用
|、&,||、&&不适用。
四、综合示例代码(四类运算符对比)
c
#include <stdio.h>
int main() {
int a = 0; // 逻辑假
int b = 1; // 逻辑真
int c = 2; // 逻辑真
int d = 0; // 逻辑假
// 1. 位或|:无短路,所有操作数执行
if (a | b | c | d) printf("至少一个真(|)\n");
// 2. 逻辑或||:有短路,效率更高
if (a || b || c || d) printf("至少一个真(||)\n");
// 3. 位与&:无短路,所有操作数执行
if (a & b & c & d) printf("所有都真(&)\n");
else printf("非所有都真(&)\n");
// 4. 逻辑与&&:有短路,效率更高
if (a && b && c && d) printf("所有都真(&&)\n");
else printf("非所有都真(&&)\n");
return 0;
}
运行结果:
至少一个真(|)
至少一个真(||)
非所有都真(&)
非所有都真(&&)
结论 :逻辑判断结果一致,但||、&&通过短路减少了运算,效率更高。
via:
- C 语言中的运算符大全(内附优先级表)_c 语言运算符号-CSDN 博客
https://blog.csdn.net/m0_50919743/article/details/115755380- C 语言运算符优先级(记忆口诀)_c语言或和与优先级-CSDN博客
https://blog.csdn.net/u013630349/article/details/47444939
- C 语言运算符优先级(记忆口诀)_c语言或和与优先级-CSDN博客
- && || 与或 逻辑运算符的短路运算_&&的运算规则-CSDN 博客
https://blog.csdn.net/bulebin/article/details/79345875 - 详解 C 语言中运算符||和&&的短路机制_&&和||是什么意思-CSDN 博客
https://blog.csdn.net/PengXing_Huang/article/details/135729081 - 【C 语言】搞懂 |、||、&、&&"超详细讲解"-CSDN 博客
https://blog.csdn.net/2301_82018821/article/details/135390431