What is the difference between the | and || or operators?
我一直在or表达式中使用
就像
例如:
1 | if(condition1 || condition2 || condition3) |
如果条件1为真,则不检查条件2和3。
1 | if(condition1 | condition2 | condition3) |
这将检查条件2和3,即使1已经为真。由于您的条件可能是非常昂贵的功能,您可以通过使用它们获得良好的性能提升。
有一个大警告,空引用或类似的问题。例如:
1 | if(class != null && class.someVar < 20) |
如果class为空,则if语句将在
但是,没有人使用单个
不过,还有第二种使用
||是逻辑或运算符。听起来你基本上知道那是什么。它用于条件语句,如if、while等。
1 | condition1 || condition2 |
如果Condition1或Condition2为true,则计算结果为true。
|是按位或运算符。它用来操作两个数字。您可以分别查看每个数字的每个位,如果其中一个位在至少一个数字中是1,那么得到的位也将是1。以下是几个例子:
1 2 3 4 5 6 7 8 9 10 11 12 | A = 01010101 B = 10101010 A | B = 11111111 A = 00000001 B = 00010000 A | B = 00010001 A = 10001011 B = 00101100 A | B = 10101111 |
希望这是有道理的。
因此,为了回答最后两个问题,我不会说除了"知道两个操作符之间的区别"之外还有任何警告。它们不能互换,因为它们做了两个完全不同的事情。
一个是"位或"。
10011b | 01000b => 11011b
另一个是逻辑或。
true or false => true
好问题。这两个操作符在php和c中工作相同。
|是位或。它将按位比较两个值。例如1101 0010=1111。这在使用位选项时非常有用。例如,read=01(0x01)write=10(0x02)read-write=11(0x03)。一个有用的例子是打开文件。一个简单的例子是:
1 | File.Open(FileAccess.Read | FileAccess.Write); //Gives read/write access to the file |
||是逻辑或。这是大多数人根据自己的真实性来思考或比较两种价值观的方式。我要去商店,否则我要去商场。这是代码中最常用的一个。例如。
1 | 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
Java中的简单示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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; } } |
输出:
1 2 3 4 5 6 | using double pipe x = 5 y = 0 using single pipe x = 5 y = 5 |
&;-(条件1和条件2):检查两种情况,即使第一种情况为假
&;&;-(条件1&;条件2):如果情况1,不必检查第二个情况是假的
&;&;-运算符将使代码运行更快,很少使用专业的代码
|-(条件1条件2):检查两种情况,即使情况1为真
||-(条件1条件2):如果是第一种情况,不需要检查第二种情况一个是真的
||-操作员将使您的代码运行更快,很少使用专业
根据它们的数学定义,或和是二元运算符;它们验证lhs和rhs条件,与和&;类似。
||以及&;更改或和运算符的属性,方法是在lhs条件未满足时停止它们。
单管是按位运算符之一。
维基百科:
In the C programming language family, the bitwise OR operator is"|" (pipe). Again, this operator must not be confused with its Boolean"logical or" counterpart, which treats its operands as Boolean values, and is written"||" (two pipes).
单管""是"位"或,仅当您知道自己在做什么时才应使用。双管""是逻辑或,可用于逻辑语句,如"x==0 x==1"。
下面是按位"或"的示例:如果a=0101,b=0011,则a b=0111。如果您处理的逻辑系统将任何非零视为真,则按位或将以与逻辑或相同的方式操作,但它的对应项(按位和,"&;")将不会。另外,按位或不执行短路评估。
运算符执行其两个操作数的按位"或"运算(意味着两侧必须计算为"假"才能返回"假"),而运算符仅在需要时计算第二个运算符。
http://msdn.microsoft.com/en-us/library/kxszd0kx(vs.71).aspx
http://msdn.microsoft.com/en-us/library/6373h346(vs.71).aspx
||(两个管道)通常是逻辑或,而(一个管道)是二进制或。从我的头顶上看,我想不出任何时候这两者之间的差别会是多么大(除了当你把结果分配给其他东西的时候)。但是我相信其他人会有一个重要的情况。
编辑:哇,在我写这篇文章的时候,还有六个答案。
单个管道()是按位或运算符。
两个管道()是逻辑或运算符。
它们不能互换。
位()对逻辑()!把逻辑看作Java中的可比较对象,比较一些可区分的"部分",而位运算符查看这些对象,而不是看它们是否是视觉孪生(如逻辑DO),而是做一个DNA样本,并查看0和1。