关于C#:| and || or & and &&逻辑运算符之间的差异

Difference between | and || or & and && for comparison

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
A clear, layman’s explanation of the difference between | and || in c# ?

与C和JavaScript中的和或&;和&;&;相比有什么区别?

实例:

1
2
if(test == test1 | test1 == test2) or if(test == test1 || test1 == test2)
if(test == test1 & test1 == test2) or if(test == test1 && test1 == test2)


在C语言(可能还有其他语言)中,单个|&是按位比较。双||&&是一个逻辑比较。编辑:请务必阅读下面Mehrdad关于"无短路"的评论。

实际上,由于true通常等同于1false通常等同于0,因此逐位比较有时是有效的,返回的结果完全相同。

有一次,我在一个关键任务软件组件上运行了一个静态代码分析器,它指出在应该进行逻辑比较的地方使用了位比较。由于它是用C语言编写的,并且由于逻辑比较的安排,所以该软件可以很好地处理这两种情况。例子:

1
2
if ( (altitide > 10000) & (knots > 100) )
...


&;和是可以对整数和布尔参数同时操作的位运算符,&;和是只能对布尔参数操作的逻辑运算符。在许多语言中,如果这两个参数都是布尔值,则关键区别在于逻辑运算符将执行短路评估,如果第一个参数足以确定答案,则不评估第二个参数(例如,在&;&;的情况下,如果第一个参数为假,则第二个参数不相关)。


&;和是二进制运算符,而和&;是布尔运算符。

最大的区别是:(1&2)为0,错误(1&2)是正确的


(假设C、C++、Java、JavaScript)

|&是位运算符,||&&是逻辑运算符。通常,您希望将||&&用于if语句和循环等(即上面的示例)。位运算符用于设置和检查位掩码中的位。


参考文献:

http://en.wikipedia.org/wiki/short-circuitu评估


使用单个字符(即或&;)的实例是结果的按位比较。只要您的语言将这些表达式计算为二进制值,它们就应该返回相同的结果。但是,作为最佳实践,您应该使用逻辑运算符,因为这就是您的意思(我认为)。


&;和通常是按位操作。

其中as&;&;和通常是逻辑操作。

为了进行比较,如果所有的返回都是1或0,那就非常好了。否则,它会返回误报。不过,您应该避免这种情况,以防止难以阅读的错误。