“|”和“||”这两个操作符有什么不同?
“|”和“||”这两个操作符有什么不同?
我一直都在C#和PHP中使用双竖杠||
来表示或运算。偶尔我会看到单竖杠|
被使用。这两种用法有什么区别?在使用时有哪些注意事项?它们是否可以互换使用?
||是逻辑或运算符。你大概知道它的作用。它用于条件语句,如if,while等。
condition1 || condition2
如果条件1或条件2其中一个为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
希望以上内容讲明白了。
回答最后两个问题,我不认为有任何注意事项,除了“要知道这两个运算符的区别”。它们不能互换,因为它们执行的完全不同的操作。
和&
和&&
运算符一样,双操作符是一种“短路”运算符。
例如:
if(condition1 || condition2 || condition3)
如果条件1为真,则不会检查条件2和3。
if(condition1 | condition2 | condition3)
即使1已经为真,它也将检查条件2和3。由于条件可能是相当昂贵的函数,因此使用它们可以获得良好的性能提升。
有一个非常大的警告,就是NullReferences或类似的问题。例如:
if(class != null && class.someVar < 20)
如果类为空,则if语句将在class!= null
为false后停止。如果仅使用&,它将尝试检查class.someVar
,并且您将获得一个不错的NullReferenceException
。使用Or-Operator可能不是那么严重的陷阱,因为不太可能触发什么问题,但这是需要记住的事情。
除非您有一个基于每个条件都必须执行的函数的设计,否则永远不会使用单个&
或|
运算符。听起来像是一种设计问题,但有时(很少)这是一种清晰的处理方法。 &
运算符是“运行这3个函数,如果其中一个返回false,则执行else块”,而|
则是“仅在所有函数均不返回false时才运行else块”-可以是有用的,但如上所述,通常是一个设计问题。
然而,|
和&
运算符还有第二种用途:按位运算。