逻辑与(&&、&)和逻辑或(||、|)
这四个逻辑运算符,大家都知道,但是有时候会凌乱,这里用程序来解释一下,以免忘了。(根据大家反应说:这文章没有解释清楚它们的区别、用法,其实文章主要说的是,如果将这四个运算符用于条件判断,那么它们会是什么结果,写文章的初衷不是讲它们的本质)
1.逻辑与
&&和&翻译成中文就是“且”的意思,都是当两个条件同时成立时执行,既然是这样,为什么要两个呢,一起来看下它们的区别,直接上代码:
public void fun()
{
int c = ; int d = ;
if ((c = ) < d && (d = ) <= c)//在条件语句中给变量赋值,方便观察条件是否有执行,不要被这个给弄乱了,其实就是先赋值后判断
{
Console.WriteLine("&& c={0},d={1}", c, d);
}
Console.WriteLine("&& c={0},d={1}", c, d);
Console.WriteLine("---------------------------------"); int e = ; int f = ;
if ((e = ) < f & (f = ) <= e)
{
Console.WriteLine("& e={0},f={1}", e, f);
}
Console.WriteLine("& e={0},f={1}", e, f);
}
会是什么个结果呢?大家看图:

结论是:“&&”当从左到右有条件为false时,就直接跳出if语句,不再往下判断,所以程序中的d不会被赋值;而“&”是无论从左到右的条件是不是为true,都会执行所有的判断条件,所以程序中的f会被赋值为10。
2.逻辑或
||和|翻译成中文就是“或”的意思,都是当两个条件中至少有一个成立时执行,一起来看下它们的区别,直接上代码:
private void fun()
{
int x = ; int y = ;
if ((x = ) > y || (y = ) < x)
{
Console.WriteLine("|| x={0},y={1}", x, y);
} Console.WriteLine("---------------------------------"); int a = ; int b = ;
if ((a = ) > b | (b = ) < a)
{
Console.WriteLine("| a={0},b={1}", a, b);
}
}
直接看结果图:

结论是:“||”当有一个条件成立时,就不再往下执行判断条件而直接执行if的内容,所以程序中的y不会被赋值为10;“|”从左到右无论是否有条件成立,都会将所有的判断语句执行。
附上本实例完整代码,以便大家体验,建立个控制台应用程序复制黏贴,直接用:
static void Main(string[] args)
{
int x = ; int y = ;
if ((x = ) > y || (y = ) < x)
{
Console.WriteLine("|| x={0},y={1}", x, y);
} Console.WriteLine("---------------------------------"); int a = ; int b = ;
if ((a = ) > b | (b = ) < a)
{
Console.WriteLine("| a={0},b={1}", a, b);
} Console.WriteLine("---------------------------------"); int c = ; int d = ;
if ((c = ) < d && (d = ) <= c)
{
Console.WriteLine("&& c={0},d={1}", c, d);
}
Console.WriteLine("&& c={0},d={1}", c, d);
Console.WriteLine("---------------------------------"); int e = ; int f = ;
if ((e = ) < f & (f = ) <= e)
{
Console.WriteLine("& e={0},f={1}", e, f);
}
Console.WriteLine("& e={0},f={1}", e, f);
Console.ReadKey();
}
总结:一句话概括——当是两个运算符(&&,||)时,当第一个条件成立(||)或违反(&&),就不再继续判断之后的条件,所以效率高一点;当是一个运算符(&,|)时,无论第一个条件是否成立(|)或违法(&),都会继续执行剩下的判断语句,所以效率低一点。
逻辑与(&&、&)和逻辑或(||、|)的更多相关文章
- CPU相关知识---物理CPU数、物理核数、逻辑核数、逻辑CPU数 ?
一.物理CPU数.物理核数.逻辑核数.逻辑CPU数 相互关系??? 物理CPU数 ---> 每个物理CPU对应物理核数 ---> (每个物理核数对应逻辑核数)物理CPU对应逻辑核数 --- ...
- 【JavaScript】JavaScript赋值语句中的逻辑与&&和逻辑或||
在其他语言中,我们往往看到逻辑符号出现在判断语句当中,如 if(a||b){} 但在一些js相关的面试题或者书中,我们有时会看到逻辑与&&和逻辑或||符号出现在赋值语句或者返回语句中, ...
- JavaScript 逻辑与(&&) 与 逻辑或(||) 运算规则
逻辑与(&&) 逻辑与(&&)操作可以应用于任何的操作类型,不仅仅是布尔值, 在有一个操作数不是布尔值的情况下,&&操作符就不一定返回布尔值:遵循下面规 ...
- 仔细看看Javascript中的逻辑与(&&)和逻辑或(||)
学过Java和C的人,都知道逻辑与(&&)和逻辑或(||),他们都是短路运算符,也就是说,对于&&来说,只要左边的操作数是false,它就不会再去判断右边的操作数是tr ...
- 学习笔记:Makefile的ifeq逻辑或,逻辑与的变通实现
(1)ifeq的用法 ifeq ($(变量名), 变量值 ) ........ else ifeq ($(..), ..) ......... else ......... endif (2) ...
- js 基础-&& || 逻辑与和逻辑或
今天百度发现一个简化长if else if 语句的方法,看起来及其强大,感觉这样虽然对系统性能提升没有帮助但是代码更简练了,分析了一番,下面先说说自己学到的理论. 首先要弄清楚js 中对于 变量, ...
- WEB安全第七篇--终结篇考验逻辑思维:逻辑漏洞大汇总(越权、会话逻辑、业务逻辑、暴力破解)
零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...
- javascript高程笔记:逻辑与和逻辑或
逻辑与和或 逻辑与 当 && 前后两个操作数都是布尔值,无可厚非,同时为true才为true.与其他强类型语言不同的是,javascript逻辑与前后的操作数可以应用于任何类型. 而且 ...
- JS && || 陷阱 javascript 逻辑与、逻辑或 【转】
通常来说逻辑运算a&&b和a||b分别是逻辑与运算和逻辑或运算,返回的是一个布尔值,要么为true,要么为false. 比如在PHP里面a&&b返回类型永远是布尔值,非 ...
- js中的逻辑与和逻辑或随笔
逻辑与:&&,都真才真 逻辑或:||,一真都真 逻辑运算两侧不都是布尔值时,会隐式转换为布尔值转换规则:转换为true:非0数字(包含infinity).非空字符串转换为false:0 ...
随机推荐
- Android中弹出对话框,AlertDialog关键代码
写在这里便于以后查看. Android中弹出对话框的关键代码: btn01.setOnClickListener(new OnClickListener() { @Override public vo ...
- 【集训笔记】【大数模板】特殊的数 【Catalan数】【HDOJ1133【HDOJ1134【HDOJ1130
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3324 http://blog.csdn.net/xymscau/artic ...
- Hadoop: the definitive guide 第三版 拾遗 第十章 之Pig
概述: Pig的安装很简单,注意一下几点: 1.设置系统环境变量: export PIG_HOME=.../pig-x.y.z export PATH=$PATH:$PIG_HOME/bin 设置完成 ...
- DataSource绑定DataTable.Select()显示system.data.DataRow问题解决的方法
有时候我们须要在控件中绑定DataTable中设定条件过滤后的数据,此时,在winForm环境中,一些控件不能正确绑定并显示数据内容.这是由于DataTable.Select()返回的是DataRow ...
- 《Java并发编程实战》第十四章 构建自己定义的同步工具 读书笔记
一.状态依赖性的管理 有界缓存实现的基类 @ ThreadSafe public abstract class BaseBoundedBuffer<E> { @GuardeBy( &quo ...
- Ganglia 权威指南-安装Ganglia过程
转自于:http://blog.csdn.net/xxd851116/article/details/21527055 http://www.dataguru.cn/article-3816-1.ht ...
- BZOJ 1260: [CQOI2007]涂色paint( 区间dp )
区间dp.. dp( l , r ) 表示让 [ l , r ] 这个区间都变成目标颜色的最少涂色次数. 考虑转移 : l == r 则 dp( l , r ) = 1 ( 显然 ) s[ l ] = ...
- C-01背包问题
[声明]:非常感谢http://blog.sina.com.cn/s/blog_6dcd26b301013810.html,给我带来的帮助. 看这个图片表示的意思: w[i]表示第i件物品的容积 ,p ...
- [ASP.NET]以iTextSharp手绘表格并产生PDF下载
原文 [ASP.NET]以iTextSharp手繪表格並產生PDF下載 大家使用iTextSharp的機緣都不太一樣, 由於單位Crystal Report的License數量有限主管要我去找一個免費 ...
- Fedora20安装完Nvidia后启动一直黑屏解决办法。
安装完Fedora20后,把Nvidia驱动装上后重起机器一直黑屏时,切换到命令行下:Alt+F2 登陆上去,然后直接更新: su -c ‘yum update’ ,再重起就OK了.