逻辑与(&&、&)和逻辑或(||、|)

这四个逻辑运算符,大家都知道,但是有时候会凌乱,这里用程序来解释一下,以免忘了。

1.逻辑与

&&和&翻译成中文就是“且”的意思,都是当两个条件同时成立时执行,既然是这样,为什么要两个呢,一起来看下它们的区别,直接上代码:

public void fun()
{
     int c = 0; int d = 0;
     if ((c = 10) < d && (d = 10) <= c)//在条件语句中给变量赋值,方便观察条件是否有执行,不要被这个给弄乱了,其实就是先赋值后判断
     {
          Console.WriteLine("&& c={0},d={1}", c, d);
     }
     Console.WriteLine("&& c={0},d={1}", c, d);
     Console.WriteLine("---------------------------------");

     int e = 0; int f = 0;
     if ((e = 10) < f & (f = 10) <= 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 = 0; int y = 0;
     if ((x = 10) > y || (y = 10) < x)
     {
          Console.WriteLine("|| x={0},y={1}", x, y);
     }

     Console.WriteLine("---------------------------------");

     int a = 0; int b = 0;
     if ((a = 10) > b | (b = 10) < a)
     {
          Console.WriteLine("| a={0},b={1}", a, b);
     }
}

直接看结果图:

结论是:“||”当有一个条件成立时,就不再往下执行判断条件而直接执行if的内容,所以程序中的y不会被赋值为10;“|”从左到右无论是否有条件成立,都会将所有的判断语句执行。

附上本实例完整代码,以便大家体验,建立个控制台应用程序复制黏贴,直接用:

static void Main(string[] args)
{
     int x = 0; int y = 0;
     if ((x = 10) > y || (y = 10) < x)
     {
          Console.WriteLine("|| x={0},y={1}", x, y);
          }

          Console.WriteLine("---------------------------------");

          int a = 0; int b = 0;
          if ((a = 10) > b | (b = 10) < a)
          {
              Console.WriteLine("| a={0},b={1}", a, b);
          }

          Console.WriteLine("---------------------------------");

          int c = 0; int d = 0;
          if ((c = 10) < d && (d = 10) <= c)
          {
              Console.WriteLine("&& c={0},d={1}", c, d);
          }
          Console.WriteLine("&& c={0},d={1}", c, d);
          Console.WriteLine("---------------------------------");

          int e = 0; int f = 0;
          if ((e = 10) < f & (f = 10) <= e)
          {
              Console.WriteLine("& e={0},f={1}", e, f);
          }
          Console.WriteLine("& e={0},f={1}", e, f);
          Console.ReadKey();
      }

总结:一句话概括——当是两个运算符(&&,||)时,当第一个条件成立(||)或违反(&&),就不再继续判断之后的条件,所以效率高一点;当是一个运算符(&,|)时,无论第一个条件是否成立(|)或违法(&),都会继续执行剩下的判断语句,所以效率低一点。

时间: 2024-08-22 16:16:09

逻辑与(&&、&)和逻辑或(||、|)的相关文章

【JavaScript】JavaScript赋值语句中的逻辑与&amp;&amp;和逻辑或||

在其他语言中,我们往往看到逻辑符号出现在判断语句当中,如 if(a||b){} 但在一些js相关的面试题或者书中,我们有时会看到逻辑与&&和逻辑或||符号出现在赋值语句或者返回语句中,如 var x=a||b; return a&&b||c; 第一次看到时,我们很可能一头雾水,这是怎么回事? 因为在js中允许使用表达式赋值,所得的值为该表达式的运算结果.如 var a= 5; var b= 6; var c= a+b; a= 10; console.log(c);//11

js 非布尔值操作 逻辑与 和 逻辑或*

/*js 非布尔值操作 逻辑与 和 逻辑或*//* * 注:( "" , 0 ,undefined ,NaN ,null 转换为 false) * *//*逻辑与*/console.log(( 1 && 1 && "hello" && 2 && 3 && 4 )); // 第一个转换为true 返回 最后一个值 (4)console.log(( 0 && 0 &&

js中的逻辑或和逻辑与

a=''||'abc';                              //返回什么?  'abc' a=1||2;                                  //返回什么?   1 var a=0; var b=++a||++a ;        //a=1;b=1; b=''&&'abc'                             //返回什么?  ’‘ b=1&&2                          

JavaScript 逻辑与(&amp;&amp;) 与 逻辑或(||) 的逻辑运算规则理解

逻辑与(&&) 逻辑与(&&)操作可以应用于任何的操作类型,不仅仅是布尔值,在有一个操作数不是布尔值的情况下,&&操作符就不一定返回布尔值:遵循下面规则: 1. 如果第一个操作数是对象(广义),则返回第二个操作数 alert('GeCan' && null) // null alert('GeCan' && NaN) // NaN alert('GeCan' && 0) // 0 alert('GeCan' &

游戏中逻辑线程和逻辑线程的并行

为什么要将游戏的渲染线程和逻辑线程分离? 游戏中渲染是一个非常耗时的操作,特别是相对复杂的游戏,渲染通常会占据一帧中的大部分时间.而高品质的游戏都会要求FPS在60,所以一帧的时间仅仅16毫秒. 如果要在16毫秒内完成逻辑和渲染双重的任务,对于大型游戏来说,通常是艰难的,即使在极度优化的情况下,也可能只能满足性能较好的设备,在性能较差的设备上,几乎不可能在16毫秒内完成所有任务. 所以如果将渲染线程和逻辑线程分离,那么理论上,他们各自都有16毫秒的时间来完成各自的任务,因为他们是并行进行的,这样

逻辑与和逻辑或运算符原理

1.逻辑或运算符|| 从左向右运算,如果当前操作数为真,则返回该操作数,否则一直向右运算,直到遇到为真的操作数,或者直到最后.当运算到最后一个操作数时,返回最后一个操作数,不必关心最后一个操作数的真假状态 <script> console.log(0||0||undefined||null); </script> 打印出: null 2.逻辑与运算符&& 从左向右运算,如果当前操作数为假,则返回该操作数,否则一直向右运算,直到遇到为假的操作数,或者直到最后.当运算到

从广义线性模型到逻辑回归,逻辑回归的深入理解

总结:由于逻辑回归假定y的条件分布(y|x)是伯努利分布,所以根据广义线性模型和指数分布簇的定义可以得到逻辑回归的假设函数是sigmoid函数. 广义线性模型的三个假设——逻辑回归 1. 假定服从指数分布簇的某个分布 逻辑回归中,,所以假定[即已知参数θ的情况下,给定x,y的条件概率服从参数的伯努利分布],此时有.在将伯努利分布转换成指数簇的表达形式中,得知[见文章后面参考] 2.假定在假设h下预测值hθ(x)满足[即预测结果要和均值相同] 在逻辑回归中, 3. 假定自然参数η与输入x之间是线性

WEB安全第七篇--终结篇考验逻辑思维:逻辑漏洞大汇总(越权、会话逻辑、业务逻辑、暴力破解)

零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的payload技巧以便于备忘.不是大神.博客内容非常基础,如果真的有人看而且是大牛们,请不要喷我,欢迎指正我的错误(水平有限). 一.越权: 1.本质: 某账户拥有了超出它应有权限范围外的操作许可权. 2.分类: (1)水平越权:横向拥有了同等安全等级.密级等衡量标准账户的权限. (2)垂直越权:纵向拥有

nginx rewrite (不支持if 嵌套也不支持逻辑或和逻辑并)

apache的rewrite是支持或者的,用个OR就可以,如果不加OR,多个RewriteCond 罗列累加就是并且的意思.然后nginx的rewrite就没有这么好了.那么如何去实现这样复杂的功能呢?这就用到了标记功能. 现在出一个简单的需求: 要求访问uri以 /abc/开头的请求,并且user_agent带有ie6或者firefox关键词的请求需要禁止访问.实现方法为: set $rule 0;                if ($document_uri ~ '^/abc')    

nginx rewrite不支持if 嵌套也不支持逻辑或和逻辑并

如题,apache的rewrite是支持或者的,用个OR就可以,如果不加OR,多个RewriteCond 罗列累加就是并且的意思.然后nginx的rewrite就没有这么好了.那么如何去实现这样复杂的功能呢?这就用到了标记功能. 现在出一个简单的需求: 要求访问uri以 /abc/开头的请求,并且user_agent带有ie6或者firefox关键词的请求需要禁止访问.实现方法为: set $rule 0;                if ($document_uri ~ '^/abc')