提问人:grady 提问时间:4/12/2011 更新时间:4/15/2015 访问量:771
C# 逻辑问题
C# logic question
问:
我有这些布尔值:
bool test = false && true || true; // true
bool test1 = false && (true || true); // false
现在,谁能解释为什么会这样?这些不应该是一样的吗?
谢谢:)
答:
&& 运算符优先于 ||这意味着您的第一个表达式等效于:
bool test = (false && true) || true;
这给出了:
bool test = false || true;
这给出了:
bool test = true;
在第二种情况下,您显式地对操作数进行分组:
bool test1 = false && (true || true);
这给出了:
bool test1 = false && true;
这给出了:
bool test1 = false;
在第一个表达式中首先计算 ,这意味着您最终得到 的结果,而不是在第二个表达式中。&&
false || true
false && true
第一个计算首先 (),然后计算结果,结果为 ,得到 。false && true
false
|| true
true
第二个计算括号中的值,然后计算 ,结果为 ,结果为 ,给出true || true
&& false
false
在测试中,你有 ,这是假的,然后你有 哪个是 。
在第二种情况下,您首先计算 =>,然后是 .false && true
false || true
true
(true || true)
true
false && true
false
在第一个示例中,首先计算 false 和 true,然后计算为 false。然后 false 或 true 当然被计算为 true。
在第二种情况下,由于 () true 或 true 首先计算为 true,然后 true & false 的计算结果为 false。
所以这是完全有道理的。
第一个:
False and True or True
满足一个条件,所以它的返回为真
第二个:
False and (True or True) = False and True
一个条件失败,所以它的返回 false
bool test = false && true || true; // true
第一个是真的,因为该语句正在测试它是真的还是假的。
bool test1 = false && (true || true); // false
第二个如果为 false,因为该语句正在测试它是否为真和假。
在第一个中,&& 优先于 ||因为您没有显式分组。
在第二个中,(...) 导致 ||首先被评估。
因此,不同的结果。
优先级顺序按以下顺序排列
- ()
- &&
- ||
因此,在第一种情况下接管,在第二种情况下接管&&
||
()
&&
上一个:如何在 Javascript 中比较字符串和布尔值?
下一个:优化布尔逻辑树计算
评论