代码之家  ›  专栏  ›  技术社区  ›  GloryFish

|和| | or运算符之间的区别是什么?

  •  263
  • GloryFish  · 技术社区  · 17 年前

    || (两个管道)在OR表达式中,使用C#和PHP。偶尔我会看到使用一根管道: | . 这两种用法有什么区别?使用其中一个时是否有任何注意事项,或者它们是否可以互换?

    13 回复  |  直到 13 年前
        1
  •  537
  •   Zze    8 年前

    就像 & &&

    例如:

    if(condition1 || condition2 || condition3)
    

    if(condition1 | condition2 | condition3)
    

    这将检查条件2和3,即使1已经为真。由于您的条件可能是非常昂贵的函数,因此使用它们可以获得良好的性能提升。

    有一个很大的警告,即引用无效或类似的问题。例如:

    if(class != null && class.someVar < 20)
    

    如果类为null,则If语句将在 class != null class.someVar 你会得到一个很好的 NullReferenceException

    没有人用过单曲 & | & 运算符执行“运行这3个函数,如果其中一个返回false,则执行else块”,而 | “只有在无返回false时才运行else块”是否有用,但如前所述,这通常是一种设计味道。

    | & Bitwise Operations .

        2
  •  84
  •   Evan Shaw    15 年前

    ||是逻辑OR运算符。听起来你基本上知道那是什么。它用于条件语句,如if、while等。

    condition1 || condition2
    

    |是按位OR运算符。它用于对两个数字进行运算。您单独查看每个数字的每个位,如果其中一个位在至少一个数字中为1,则结果位也将为1。以下是几个例子:

    A = 01010101
    B = 10101010
    A | B = 11111111
    
    A = 00000001
    B = 00010000
    A | B = 00010001
    
    A = 10001011
    B = 00101100
    
    A | B = 10101111
    

    因此,为了回答最后两个问题,我不会说除了“了解两个操作符之间的差异”之外,还有任何警告。它们不能互换,因为它们做两件完全不同的事情。

        3
  •  34
  •   Rui Jarimba    8 年前

    一个是“按位或”。

    10011b | 01000b=>11011b

    另一种是逻辑或。

        4
  •  17
  •   krobelusmeetsyndra AnalystCave.com    7 年前

    好问题。这两个操作符在PHP和C#中的工作方式相同。

    |

    File.Open(FileAccess.Read | FileAccess.Write);  //Gives read/write access to the file
    

    || 是逻辑OR。这是大多数人思考或比较两种价值观的方式。我要去商店,否则我要去购物中心。这是代码中最常用的一个。例如:

    if(Name == "Admin" || Name == "Developer") { //allow access } //checks if name equals Admin OR Name equals Developer
    

    http://us3.php.net/language.operators.bitwise

    http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx

    http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx

        5
  •  10
  •   Bhai Saab    8 年前

    &-(条件1和条件2):检查两种情况,即使第一种情况为假

    &&-(条件1和条件2):如果情况1,不必费心检查第二种情况

    &&-操作员将使您的代码运行更快、更专业&很少使用

    |-(条件1 |条件2):检查两种情况,即使情况1为真

    一个是真的

    ||-操作员将使您的代码运行更快,但很少使用

        6
  •  5
  •   vishesh    14 年前

    java中的简单示例

    public class Driver {
    
      static int x;
      static int y;
    
    public static void main(String[] args) 
    throws Exception {
    
    System.out.println("using double pipe");
        if(setX() || setY())
            {System.out.println("x = "+x);
            System.out.println("y = "+y);
            }
    
    
    
    System.out.println("using single pipe");
    if(setX() | setY())
        {System.out.println("x = "+x);
        System.out.println("y = "+y);
        }
    
    }
    
     static boolean setX(){
          x=5;
         return true;
      }
     static boolean setY(){
          y=5;
          return true;
      }
    }
    

    输出:

    using double pipe
    x = 5
    y = 0
    using single pipe
    x = 5
    y = 5
    
        7
  •  0
  •   codeLes    17 年前

    bitwise 接线员。

    来自维基百科:

        8
  •  0
  •   Dragos Bandur    9 年前

    根据它们的数学定义,OR和是二进制运算符;它们验证LHS和RHS条件,与|和&类似;。

    ||及&当LHS条件未满足时,通过停止OR和运算符来改变它们的属性。

        9
  •  0
  •   Tharindu Vindula    6 年前

    按位计算 | 还有Logicall ||

    按位 & 还有logicall &&

    if( a>b | a==0) 在第一个左边 a>b 将进行评估,然后 a==0 |

    但是在 || if a>b 那么如果你不检查下一个RHS

    对于&及&

    if(A>0 & B>0)

    在里面 (A>0 && B>0)

    if(A>0) false return false;

        11
  •  -3
  •   Kyle Cronin    17 年前

    单管“|”是“按位”或,仅当您知道自己在做什么时才应使用。双管道“| |”是一个逻辑or,可以在逻辑语句中使用,如“x==0 | | x==1”。

    下面是一个按位or的示例:如果a=0101和b=0011,那么a | b=0111。如果您处理的逻辑系统将任何非零视为真,那么按位or将以与逻辑or相同的方式工作,但其对应项(按位and,“&”)不会。此外,按位or不执行短路评估。

        12
  •  -3
  •   Dane    17 年前

    单根管道(|)是 bitwise OR operator

    双管道(| |)是逻辑OR运算符。

    它们不能互换。