我总是在OR表达式中使用||(两个管道),无论是在c#还是PHP中。我偶尔会看到使用单个管道:|。这两种用法有什么区别?使用其中一种时有什么注意事项吗?或者它们是可以互换的吗?


当前回答

|操作符执行其两个操作数的逐位或运算(意味着两边都必须求值为false才能返回false),而||操作符只在需要时求值第二个操作符。

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

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

其他回答

单个管道(|)是按位的OR操作符。

Two pipes(||)是逻辑或运算符。

它们是不可互换的。

好问题。这两个操作符在PHP和c#中工作相同。

|是位或。它将比较两个值的位。例:1101 | 0010 = 1111。这在使用位选项时非常有用。例:读= 01 (0X01)写= 10 (0X02)读写= 11 (0X03)一个有用的例子是打开文件。一个简单的例子是:

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

PHP资源:http://us3.php.net/language.operators.bitwise

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

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

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

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

单个管道|是位操作符之一。

从维基百科:

在C编程语言家族中,按位的OR运算符是“|”(管道)。同样,此操作符不能与布尔“逻辑或”对应的操作符混淆,后者将其操作数视为布尔值,并且写为“||”(两个管道)。

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