之间有什么区别

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


就像&&&操作符一样,双操作符是一个“短路”操作符。

例如:

if(condition1 || condition2 || condition3)

如果condition1为true,则不会检查条件2和3。

if(condition1 | condition2 | condition3)

这将检查条件2和3,即使1已经为真。 由于你的条件可能是相当昂贵的功能,你可以通过使用它们来获得很好的性能提升。

有一个大的警告,NullReferences或类似的问题。 例如:

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

如果class为null,那么if语句将在class != null为false后停止。 如果你只使用&,它会尝试检查class.someVar ,你会得到一个不错的NullReferenceException 。 由于Or运算符可能不是一个陷阱,因为它不太可能触发一些不好的事情,但需要牢记。

没有人使用过单个&| 不过,除非你有一个设计,其中每个条件都是要执行的函数。 听起来像是一种设计气味,但有时(很少)它是一种干净的做事方式。 &运算符“运行这3个函数,如果其中一个返回false,则执行else块”,而| 如果没有返回false,那么“只运行else块” - 可能很有用,但正如所说的那样,它通常是一种设计气味。

|的第二个用法 和&运算符:位运算。


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

condition1 || condition2

如果条件1或条件2为真,则评估为真。

| 是按位或运算符。 它用于对两个数字进行操作。 您可以分别查看每个数字的每个位,如果其中至少一个数字中的某个位为1,则结果位也为1。 这里有一些例子:

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或false => true

链接地址: http://www.djcxy.com/p/10053.html

上一篇: What is the difference between the

下一篇: How to 'insert if not exists' in MySQL?