| |之间有什么区别?和||还是运营商?
在Cand PHP中,我一直在OR表达式中使用||
(两个管道)。有时我会看到一个管道:|
。这两种用法有什么区别?在彼此之间使用时是否存在一些警告或者可以互换?
解决方案
回答
一个是"按位或者"。
10011b | 01000b => 11011b
另一个是逻辑或者。
true or false => true
回答
的|当||时,运算符对其两个操作数执行按位"或者"(意味着双方都必须求值为false才能返回false)。操作员仅在需要时才评估第二个操作员。
http://msdn.microsoft.com/zh-cn/library/kxszd0kx(VS.71).aspx
http://msdn.microsoft.com/zh-CN/library/6373h346(VS.71).aspx
回答
单管" |"是"按位"或者,仅当我们知道自己在做什么时才使用。双管" ||"是逻辑或者,可以在逻辑语句中使用,例如" x == 0 || x == 1"。
这是按位或者操作的示例:如果a = 0101和b = 0011,则a | b = 0111. 如果我们要处理的逻辑系统会将任何非零视为真,那么按位或者将以与逻辑或者相同的方式起作用,但是与之相对的(按位和,"&")则不会。也按位或者不执行短路评估。
回答
单个管道(|)是按位OR运算符。
两个管道(||)是逻辑OR运算符。
它们不可互换。
回答
|| (两个管道)通常是合乎逻辑的或者同时| (一个管道)是二进制或者。在我脑海中,我想不出什么时候会有很大的麻烦(除了将结果分配给其他东西时)。但是,我相信其他人也会遇到这种情况。
编辑:哇,在我写这篇文章的时候,还有六个答案。
回答
||是逻辑OR运算符。听起来我们基本上知道那是什么。它用于条件语句中,例如if,while等。
condition1 || condition2
如果condition1或者condition2为true,则求值为true。
|是按位或者运算符。它用于对两个数字进行运算。我们分别查看每个数字的每个位,如果至少一个数字中的一位为1,则结果位也将为1. 这里有一些例子:
A = 01010101 B = 10101010 A | B = 11111111 A = 00000001 B = 00010000 A | B = 00010001 A = 10001011 B = 00101100 A | B = 10101111
希望这是有道理的。
因此,要回答最后两个问题,除了"知道两个运算符之间的区别"之外,我不会说其他任何警告。它们不可互换,因为它们做了两种完全不同的事情。
回答
就像&
和&&
运算符一样,double运算符也是"短路"运算符。
例如:
if(condition1 || condition2 || condition3)
如果condition1为true,则不会检查条件2和3.
if(condition1 | condition2 | condition3)
即使1已经为真,这也会检查条件2和3. 由于条件可能是相当昂贵的功能,因此可以通过使用它们来获得良好的性能提升。
有一个很大的警告,NullReferences或者类似的问题。例如:
if(class != null && class.someVar < 20)
如果class为null,则在class!= null
为false之后,if语句将停止。如果仅使用&,它将尝试检查class.someVar
,并且会得到一个不错的NullReferenceException
。使用Or-Operator可能并不会造成太大的陷阱,因为我们不太可能触发不良事件,但要牢记这一点。
但是,除非设计中每个条件都是要执行的功能,否则没有人会使用单个&
或者|
运算符。听起来像是设计的气味,但有时(很少)是一种做事的干净方法。 &
运算符确实"运行这三个函数,并且如果其中一个返回false,则执行else块",而|
确实执行"仅在没有返回false的情况下运行else块",但是如上所述,通常是设计气味。
不过,还有|
和&
运算符的第二种用法:按位运算。
回答
好问题。这两个运算符在PHP和C#中的工作方式相同。
|是按位或者。它将按位比较两个值。例如。 1101 | 0010 =1111. 这在使用位选项时非常有用。例如。读取= 01(0X01)写入= 10(0X02)读写= 11(0X03)。一个有用的例子是打开文件。一个简单的例子是:
File.Open(FileAccess.Read | FileAccess.Write); //Gives read/write access to the file
||是逻辑或者。这是大多数人对"或者"的看法,并根据其真实性比较两个值。例如。我要去商店,否则我将去购物中心。这是代码中最常使用的代码。例如。
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/zh-cn/library/kxszd0kx(VS.71).aspx
http://msdn.microsoft.com/zh-CN/library/6373h346(VS.71).aspx
回答
单个管道|是按位运算符之一。
从维基百科:
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).
回答
按位(|)与逻辑(||)!
将逻辑视为Java中的可比较对象,比较一些可区分的"部分",而按位运算符查看这些对象,而不是查看它们是否在视觉上是孪生的(就像逻辑一样),进行DNA采样并查看0和1反而。