兩個表達式返回的是同一個值,因為操作符&&的優先級低於>=和&<=。然而,第二個表達式采取更清晰易懂的方式表明了它的目的。
兩個操作符任何一個為true,操作符||的求值結果都為true。使用操作符||,我們可以判斷兩個條件中是否有任何一個成立。如果percent的值小於零,或者percent的值大於100,以下語句會將值true賦給invalidPercentage:
bool invalidPercentage;
invalidPercentage = (percent &< 0) || (percent > 100);
短路求值
操作符&&和||都具備一項名為短路求值(short circuiting)的特性。有時,根本沒有必要將兩個操作數都求值出來。例如,假定操作符&&的左操作數求值為false,那麼整個表達式的結果肯定是false,不管右操作數的值是什麼。類似地,如果操作符||的左操作數求值為true,那麼整個表達式的結果肯定是true。在這些情況下,操作符&&和||將繞過對右側的布爾表達式的求值。下面是一些例子:
(percent >= 0) && (percent &<= 100)
在這個表達式中,假如percent的值小於零,那麼操作符&&左側的布爾表達式會求值為false。該值意味著整個表達式的結果肯定為false,無論右側的表達式是什麼。所以,不會對右側的表達式進行求值。
(percent &< 0) || (percent > 100)
在這個表達式中,如果percent的值小於零,操作符||左側的布爾表達式會求值為true。該值意味著整個表達式的結果肯定為true。所以,不會對右側的表達式進行求值。
如果能小心地設計表達式來使用條件邏輯操作符,就可以避免通過不必要的工作來提升代碼的性能。將計算容易、簡單的布爾表達式放到條件邏輯操作符的左邊,將較復雜的表達式放到右邊。在許多情況下,程序並不需要求值更復雜的表達式。
操作符優先級和結合性總結
表3總結了迄今為止學過的所有操作符的優先級和結合性。相同類別的操作符具有相同的優先級。一個更高類別中的操作符優先於較低類別中的操作符。
表3 操作符小結
類 別 操 作 符 描 述 結 合 性 主要(Primary) ()++-- 覆蓋優先級後遞增後遞減 左 一元(Unary) !+-++-- 邏輯NOT加減前遞增前遞減 左 乘(Multiplicative) */% 乘除求余 左 加(Additive) +- 加減 左 關系(Relational) &<&<=>>= 小於小於或等於大於大於或等於 左 相等(Equality) ==!= 等於不等於 左 條件AND(Conditional AND) && 邏輯AND 左 條件OR(Conditional OR) || 邏輯OR 左 賦值(Assignment) = 右