Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何计算没有括号的AND或表达式_C#_.net - Fatal编程技术网

C#如何计算没有括号的AND或表达式

C#如何计算没有括号的AND或表达式,c#,.net,C#,.net,不确定这是否有意义 我试图理解C#如何处理以下逻辑 false && true || false false || true && false 基本上,我试图找出在没有括号的情况下C如何计算这些表达式。编译器会计算出来,因为标准指定了 这就是说,如果一个表达式需要你思考一秒钟以上的事情发生的顺序。。。使用括号表示清楚=)显示运算符优先级: false && true || false = (false && true) |

不确定这是否有意义 我试图理解C#如何处理以下逻辑

false && true || false
false || true && false

基本上,我试图找出在没有括号的情况下C如何计算这些表达式。

编译器会计算出来,因为标准指定了

这就是说,如果一个表达式需要你思考一秒钟以上的事情发生的顺序。。。使用括号表示清楚=)

显示运算符优先级:

false && true || false    =  (false && true) || false        =  false
false || true && false    =  false || (true && false)        =   false
&&
(逻辑AND)的优先级高于
|
(逻辑OR)


注意:始终使用括号对逻辑表达式进行分组是一种好的做法(有些人可能会说是最佳做法),这样其目的就明确了……

&
的值高于
|
,因此首先对其进行评估。实际上,它们相当于:

false && true || false  =>  (false && true) || false  =>  false
false || true && false  =>  false || (true && false)  =>  false
如果您不确定,请使用括号。它们没有真正的负面影响,任何使代码更具可读性的东西通常都是好事

也许更好的例子(因此结果不同)是:

true && false || false  =>  (true && false) || false  =>  false
true || false && false  =>  true || (false && false)  =>  true

操作员将按顺序进行评估

所以,基本上,
s之前。您的示例与以下示例相同:

(false && true) || false
false || (true && false)
最重要的是。。。C#使用短路运算符。所以整件事都是假的

每个人都提到了运算符优先级和可以在其中查找的参考表。但我想给你一个如何记住它的提示。如果你把
false
看作
0
true
看作
1
,那么
&
就像乘法,
|
就像加法(它们实际上被称为逻辑乘法和逻辑加法)。优先级关系是相同的:乘法高于加法。其工作原理相同:

0 * 0 == 0       |     false && false == false
0 * 1 == 0       |     false && true  == false
1 * 0 == 0       |     true  && false == false
1 * 1 == 1       |     true  && true  == true

0 + 0 == 0       |     false || false == false
0 + 1 == 1       |     false || true  == true
1 + 0 == 1       |     true  || false == true
1 + 1 == 1*      |     true  || true  == true
(*)实际上是2加1

当有疑问时,通常使用括号。

运算符优先级 短路评估 括号
从左到右。

AND运算符的优先级高于OR运算符(请参阅)。始终首先计算含义(&E)

因此,
x&&y|z
被理解为
(x&&y)|z


a | | b&c
被理解为
a | |(b&c)

不幸的是,这是一个糟糕的例子,因为无论你选择哪个优先级,它们的计算结果都是相同的:)这是一个相当糟糕的例子,因为
((假与真)|假)==(假与(真与假)
(假与假)=((假与假与假)=(真)&&false)
@cHao:您似乎混淆了实际值和真实值之间的关系。我试图创建自己的逻辑来计算字符串表达式,只是为了好玩:),使用圆括号可能会容易得多,这是因为示例没有说明存在重要的差异。这就是问题所在。正如我(措辞拙劣)的回答试图弄清楚的那样……我认为指出c#使用短路“&&”运算符是很重要的。一旦初始值为false,评估就停止。虽然您的答案在覆盖运算符优先级方面是一个很好的解决方案,但我相信不要忘记这些细节是很重要的。已经有多个其他答案包含了多年来一直存在的所有这些信息。这个答案没有增加任何价值。