逻辑运算符:(A> = 100&& B< 100 || B

时间:2010-08-12 07:31:23

标签: c# operators

表达好吗?

(A>=100 && B<100 || B<A)

我不确定是否应该:

(A>=100 && (B<100 || B<A))

我需要说当A&gt; = 100 AND(B <100或B

7 个答案:

答案 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问题中存在拼写错误