&&和||的短路特性

&&和||运算有一个短路特性简单叙述如下。

要使(表达式1)&&(表达式2)运算结果为真则要求:表达式1,表达式2都为真,如果表达式1为假,则不计算表达式2了,因为此时已经确定(表达式1)&&(表达式2)运算结果不可能为真,这就是&&运算的短路特性。

要使(表达式1)||(表达式2)运算结果为假则要求:表达式1,表达式2都为假,如果表达式1为真,则不计算表达式2了,因为此时已经确定(表达式1)||(表达式2)运算结果不可能为假,这就是||运算的短路特性。

#include<stdio.h> 
int main(void)
{
 	int a=0,b=1;
 	if(a++&&b++)
 	{
 		printf("a=%d  b=%d\n",a,b);
 	}
	 else
 	{
 		printf("a=%d  b=%d\n",a,b);	//因为&&短路特性,应执行此句,且b++不执行 
 	}
 	if(a++||--b)
 	{
 		printf("a=%d  b=%d\n",a,b);    //因为||短路特性,应执行此句,且--b不执行 
 	}
 	else
 	{
 		printf("a=%d  b=%d\n",a,b);
 	}
	return 0;
}

### C# 中逻辑运算符 `&&` `||` 的短路规则 在 C# 中,逻辑运算符 `&&` `||` 遵循短路规则。对于 `&&` 运算符,如果第一个操作数为 `false`,则整个表达式的结果必定为 `false`,因此不会对第二个操作数进行求值[^3]。同样,对于 `||` 运算符,如果第一个操作数为 `true`,则整个表达式的结果必定为 `true`,也不会对第二个操作数进行求值。 以下是一个示例代码,展示短路规则的实际应用: ```csharp int a = 10; bool str = a > 1 || ++a < 11; Console.WriteLine(a); // 输出: 10,因为第一个条件为 true,++a 不会被执行[^3] int b = 20; bool str2 = b > 100 && ++b > 11; Console.WriteLine(b); // 输出: 20,因为第一个条件为 false,++b 不会被执行 ``` 在这个例子中: - 对于变量 `a`,由于第一个条件 `a > 1` 已经为 `true`,因此 `++a < 11` 不会被求值,最终输出的 `a` 值保持不变。 - 对于变量 `b`,由于第一个条件 `b > 100` 为 `false`,因此 `++b > 11` 不会被求值,最终输出的 `b` 值也保持不变。 ### 短路规则的重要性 短路规则不仅提高了程序的效率,还避免了可能引发错误的操作。例如,在检查一个对象是否为空后再访问其属性时,短路规则可以防止出现空引用异常[^3]。 #### 示例:避免空引用异常 ```csharp string name = null; if (name != null && name.Length > 0) { Console.WriteLine("Name is not empty."); } else { Console.WriteLine("Name is null or empty."); } ``` 在这个例子中,如果 `name` 为 `null`,则不会对 `name.Length` 进行求值,从而避免了空引用异常的发生[^3]。 ### 逻辑运算符优先级与结合性 需要注意的是,逻辑运算符 `&&` `||` 的优先级低于算术运算符关系运算符(逻辑非 `!` 除外)。这意味着在混合使用这些运算符时,可能需要使用括号来明确表达式的求值顺序[^2]。 #### 示例:逻辑运算符的优先级 ```csharp bool a = true; bool b = false; bool c = true; bool result = (a || b) && c; // (true || false) && true -> true && true -> true[^2] Console.WriteLine(result); // 输出: true ``` 在这个例子中,由于 `||` 的优先级低于 `&&`,因此需要用括号明确 `(a || b)` 的求值顺序。 ### 总结 C# 中的逻辑运算符 `&&` `||` 遵循短路规则,这有助于提高程序效率并避免潜在错误。在实际编程中,应充分利用这一特性来编写更安全高效的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值