“|”和“||”这两个操作符有什么不同?

143 浏览
0 Comments

“|”和“||”这两个操作符有什么不同?

我一直都在C#和PHP中使用双竖杠||来表示或运算。偶尔我会看到单竖杠|被使用。这两种用法有什么区别?在使用时有哪些注意事项?它们是否可以互换使用?

admin 更改状态以发布 2023年5月23日
0
0 Comments

||是逻辑或运算符。你大概知道它的作用。它用于条件语句,如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

希望以上内容讲明白了。

回答最后两个问题,我不认为有任何注意事项,除了“要知道这两个运算符的区别”。它们不能互换,因为它们执行的完全不同的操作。

0
0 Comments

&&&运算符一样,双操作符是一种“短路”运算符。

例如:

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块”-可以是有用的,但如上所述,通常是一个设计问题。

然而,|&运算符还有第二种用途:按位运算。

0