| |之间有什么区别?和||还是运营商?

时间:2020-03-05 18:45:14  来源:igfitidea点击:

在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反而。