2015-11-24 60 views
-4

是它在邏輯上做到以下幾點是相同的:一系列&&/||運營商

if (a || b || c || d) 

VS

if ((a || b) || (c || d)) 

換句話說,請問& &和秩序||操作員工作,從左到右還是從右到左?

如何:

if (a && b && c && d) 

VS

if ((a && b) && (c && d)) 
+0

運算符的所有參數總是從左到右進行計算。優先權是一個不同的問題(這是關於選擇開始的運營商)。 – biziclop

+3

@bizclop所有*操作數*從左到右進行評估。運算符根據它們的關聯性和優先級進行評估。 – EJP

+0

@EJP是的,我澄清了這一說法。這只是一個常見的誤解,即右聯合意味着從右到左進行評估。 – biziclop

回答

0

兩個聲明if (a || b || c || d)if ((a || b) || (c || d))將返回true如果任一變量是真實的。

而且聲明if (a && b && c && d)if ((a && b) && (c && d))只有在沒有任何變量爲假時纔會返回true。

此外評估是從左到右。

+0

也有短路的問題,但這也不會改變事情。 – biziclop

0

這些是從左到右操作的短路操作符,意思是一旦整個表達式的邏輯值不能被剩餘的項,執行暫停而改變。只要||遇到true,它就會停止並且整個事情都是真實的,只要&&遇到false,它就是假的。因此,儘管這些運算符在理論上是聯想性和交換性的,但是排序和分組確實具有實際效果。事實上,這是常見的做一些事情,如:

if (foo == null || foo.someProperty()) 

if (foo != null && foo.someProperty()) 

上述這些問題都不能保證有一個空指針異常,因爲如果foo爲空,第二個沒有得到評估。

1

如果是左關聯,則從左到右評估一系列相同的運算符,如果是右關聯,則從右到左評估一系列相同的運算符。因此,例如

a || b || c 

相同

(a || b) || c 

如果混合Howver ||和& &然後運算符優先權接管。

0

我想提供一個詳細的答案,以便您不僅瞭解邏輯(AND)和(OR),而且還了解一般操作符是如何評估的以及它們的優先順序是什麼。有多種方法可以評估多個邏輯表達式。

的第一步是要了解的真值表爲OR和AND如下所示(Source):

enter image description here

如上所示,對於和y的x和y(X & x的不同值& Y)和X OR Y(X || Y)產生不同的值。如果您在下面注意AND操作,要求X和Y都爲真,以便結果爲真,但是如果X或Y爲真,則結果爲真。

你需要知道上面的表和心和OR。

如果您希望能夠評估多個邏輯表達式(AND和OR),De Morgen's法律可以幫助您如何使用NOT操作來完成此操作。

的規則可以在英語來表達:

一個共同的否定是否定的脫節。否定是一個否定的聯合。

或非正式地爲:

「不(A和B)」 是相同的 「(非A)或(未B)」

也,

「不(A或B)「與」(不是A)和(不是B)「相同。

瞭解更多關於德·摩根定律,以及如何在herehere評價使用了它的多個邏輯表達式。

邏輯AND和OR的優先級從左到右。見下表(Source),這應該讓你知道哪些運算符是左到右,哪些是從左到右以及它們的優先順序,例如() and []具有最高的優先級,並且運算符之間的賦值優先級最低。如果您發現

enter image description here

回到您的例子

if (a || b || c || d) 

根據真值表還有來自

a=true,b=true,c=true,d=true 
... 
... 
... 
a=false,b=false,c=false,d=false 

開始只要任何一個,B的16個可能的組合,c,d是真的,那麼結果是真的,因此,在16個可能的組合中,15個將是真的,並且最後一個將是假的,因爲所有的a,b,c,d都是假的。

ON是否與以上相同?是。

if ((a || b) || (c || d)) 

2之間的唯一區別是,在第二個中的托架被第一因此評價(一個|| b)的評估然後用ORD(C || d),但的評價結果​​。上面的同樣的邏輯也是真的。只要a,b,c,d中的一個是真的,那麼結果就是真的。

關於以下情況,是的,兩者評估的結果相同。

if (a && b && c && d) 
vs 
if ((a && b) && (c && d)) 

同上16 a,b,c,d不同值的可能組合。上述唯一真實的結果是當所有的a,b,c,d都是真實的。因此只有一個是真的,另一個是假的。