答案 0 :(得分:3)
您所谈论的是运营商优先级。 AND符号的优先级高于OR,因此在第一个示例中,首先计算AND。如果你想首先计算OR,那么,是的,你应该包括括号。
答案 1 :(得分:1)
嗯,实际上:
(A>=100 && (B<100 || B<A))
与:
相同(A>=100 && B<A)
这是因为,如果B < 100
,它自A
以来自动小于A >= 100
,这是证明它的代码(在C中但C#应该相同):
#include <stdio.h>
static void test (int a, int b) {
printf ("a=%3d, b=%3d : ok=%d\n", a, b,
(a>=100 && (b<100 || b<a)) == (a>=100 && b<a));
}
int arr[] = {1,2,3,99,100,101,199,200,201};
int main (void) {
int i, j;
for (i = 0; i < sizeof(arr)/sizeof(*arr); i++) {
for (j = 0; j < sizeof(arr)/sizeof(*arr); j++) {
test (arr[i], arr[j]);
}
}
return 0;
}
输出:
a= 1, b= 1 : ok=1
a= 1, b= 2 : ok=1
a= 1, b= 3 : ok=1
a= 1, b= 99 : ok=1
a= 1, b=100 : ok=1
a= 1, b=101 : ok=1
a= 1, b=199 : ok=1
a= 1, b=200 : ok=1
a= 1, b=201 : ok=1
a= 2, b= 1 : ok=1
a= 2, b= 2 : ok=1
a= 2, b= 3 : ok=1
a= 2, b= 99 : ok=1
a= 2, b=100 : ok=1
a= 2, b=101 : ok=1
a= 2, b=199 : ok=1
a= 2, b=200 : ok=1
a= 2, b=201 : ok=1
a= 3, b= 1 : ok=1
a= 3, b= 2 : ok=1
a= 3, b= 3 : ok=1
a= 3, b= 99 : ok=1
a= 3, b=100 : ok=1
a= 3, b=101 : ok=1
a= 3, b=199 : ok=1
a= 3, b=200 : ok=1
a= 3, b=201 : ok=1
a= 99, b= 1 : ok=1
a= 99, b= 2 : ok=1
a= 99, b= 3 : ok=1
a= 99, b= 99 : ok=1
a= 99, b=100 : ok=1
a= 99, b=101 : ok=1
a= 99, b=199 : ok=1
a= 99, b=200 : ok=1
a= 99, b=201 : ok=1
a=100, b= 1 : ok=1
a=100, b= 2 : ok=1
a=100, b= 3 : ok=1
a=100, b= 99 : ok=1
a=100, b=100 : ok=1
a=100, b=101 : ok=1
a=100, b=199 : ok=1
a=100, b=200 : ok=1
a=100, b=201 : ok=1
a=101, b= 1 : ok=1
a=101, b= 2 : ok=1
a=101, b= 3 : ok=1
a=101, b= 99 : ok=1
a=101, b=100 : ok=1
a=101, b=101 : ok=1
a=101, b=199 : ok=1
a=101, b=200 : ok=1
a=101, b=201 : ok=1
a=199, b= 1 : ok=1
a=199, b= 2 : ok=1
a=199, b= 3 : ok=1
a=199, b= 99 : ok=1
a=199, b=100 : ok=1
a=199, b=101 : ok=1
a=199, b=199 : ok=1
a=199, b=200 : ok=1
a=199, b=201 : ok=1
a=200, b= 1 : ok=1
a=200, b= 2 : ok=1
a=200, b= 3 : ok=1
a=200, b= 99 : ok=1
a=200, b=100 : ok=1
a=200, b=101 : ok=1
a=200, b=199 : ok=1
a=200, b=200 : ok=1
a=200, b=201 : ok=1
a=201, b= 1 : ok=1
a=201, b= 2 : ok=1
a=201, b= 3 : ok=1
a=201, b= 99 : ok=1
a=201, b=100 : ok=1
a=201, b=101 : ok=1
a=201, b=199 : ok=1
a=201, b=200 : ok=1
a=201, b=201 : ok=1
但是,如果这些只是一般项目而不是特定项目,&&
在C#中有higher precedence而不是||
,那么您应该使用:
(A>=100 && (B<100 || B<A))
答案 2 :(得分:1)
A>=100 && B<100 || B<A
没有意义:它等于B<A
。
A>=100 && (B<100 || B<A)
也没有意义:它等于A>=100 && B<A
。
答案 3 :(得分:0)
A>=100 && B<100 || B<A
是隐式版本:
(A>=100 && B<100) || B<A
作为&amp;&amp;运算符优先于||
答案 4 :(得分:0)
基本上没有......
和(&amp;&amp;)已经 - 或者至少 应该< - >优先于或(||) - 但无论是否有任何怀疑的可能性都会以这样的方式写表达式:读者(以及编译器)对你的意图很清楚。
如果你的意思是:
如果A> = 100,那么如果B <1。 100或B <100你必须写
(A>=100 && (B<100 || B<A))
然而,在该具体实例中,B 100是多余的 - 也就是说,我认为造成进一步的混乱,你只需要
(A>=100 && B<A)
答案 5 :(得分:0)
(A> = 100&amp; B&lt; 100 || B&lt; A)与((A> = 100&amp; B&lt; 100)|| B&lt; A)相同
在这种情况下,在两种情况下都是如此:
1)A> = 100且B <1。 100(注意,B&lt; A自动跟随)
2)B&lt; A&lt; 100
(A> = 100&amp;&amp;(B&lt; 100 || B&lt; A))
如果
,这将是真的1)A高于100 AND
2)B低于A
即,。这与(A> = 100&amp;&amp; B&lt; A)相同(但B不必低于100)
答案 6 :(得分:0)
(A=<100 && B>100 || B<A)
我认为OP问题中存在拼写错误