可能重复:
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)
答案 0 :(得分:32)
在C语言(可能是其他语言)中,单个|
或&
是逐位比较。
双||
或&&
是一个逻辑比较
编辑:请务必阅读Mehrdad关于“无短路”的评论
实际上,由于true
通常等同于1
且false
通常等同于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,它就完全没问题。否则,它会返回误报。你应该避免这种情况,以防止难以读取错误。