|之间的区别和||或者&和&&为了比较

时间:2009-08-14 17:48:51

标签: c# comparison operators

  

可能重复:
  A clear, layman’s explanation of the difference between | and || in c# ?

与|比较有什么区别和||或者&和&&在C#和Javascript?

示例:

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

7 个答案:

答案 0 :(得分:32)

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

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

曾经有一个关键任务软件组件我运行了一个静态代码分析器,它指出在逻辑比较应该使用的位比较。由于它是用C语言编写的,并且由于逻辑比较的安排,因此软件可以正常工作。例如:

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

答案 1 :(得分:29)

&安培;和|是按位运算符,可以对整数和布尔参数进行操作,并且&&和||是逻辑运算符,只能在布尔参数上运行。在许多语言中,如果两个参数都是布尔值,则关键区别在于逻辑运算符将执行短路评估,如果第一个参数足以确定答案,则不评估第二个参数(例如,在&&,&如果第一个参数为false,则第二个参数无关紧要。)

答案 2 :(得分:8)

&安培;和|是||的二元运算符和&&是布尔值。

最大的区别:
(1& 2)为0,假
(1&& 2)是真的

答案 3 :(得分:3)

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

答案 6 :(得分:0)

&和|通常是按位操作。

在哪里&&和||通常是逻辑操作。

为了进行比较,只要一切都返回1或0,它就完全没问题。否则,它会返回误报。你应该避免这种情况,以防止难以读取错误。