【正文】
式的值。 用途: 常用于循環(huán) for語句中 。 例如: a+3, b=4, b++ 例 : a = 3 * 5, a * 4 a = 3 * 5, a * 4, a + 5 例 : x = (a = 3, 6 * 3) x = a = 3, 6 * a 例: a = 1。 b = 2。 c = 3。 printf (―%d,%d,%d‖, a, b, c)。 printf (―%d,%d,%d‖, (a, b, c), b, c)。 //a=15( 賦值號優(yōu)先級要高) ,表達(dá)式值 60 //a=15,表達(dá)式值 20 //賦值表達(dá)式,表達(dá)式值 18, x=18 //逗號表達(dá)式 ,表達(dá)式值 18,x=3 //1,2,3 //3,2,3 例 : int a =6,b=3,c=8,y。 y=(ab,b+c)。 例 : int a=6,b=3,c=8,x,y,z。 y=(x=ab,(z=a*c,b+x))。 //y的值為 11 //x的值為 3,y的值為 6, z的值為 48 關(guān)系運(yùn)算符和關(guān)系表達(dá)式 關(guān)系運(yùn)算符和關(guān)系表達(dá)式 關(guān)系運(yùn)算符 含 義 優(yōu) 先 級 結(jié) 合 性 大于 這些關(guān)系運(yùn)算符等優(yōu)先級,但比下面的優(yōu)先級 高 左結(jié)合性 = ( 和 =之間沒有空格) 大于或等于 小于 = ( 和 =之間沒有空格) 小于或等于 == (兩個 =之間沒有空格) 等于 這些關(guān)系運(yùn)算符等優(yōu)先級,但比上面的優(yōu)先級 低 != ( !和 =之間沒有空格) 不等于 ? 關(guān)系運(yùn)算符 ? 關(guān)系表達(dá)式 用關(guān)系運(yùn)算符連接起來的式子稱為 關(guān)系表達(dá)式 。 關(guān)系表達(dá)式的一般形式為: 表達(dá)式 關(guān)系運(yùn)算符 表達(dá)式 例: a + b c – d x 3 / 2 39。a39。 + 1 c – i – 5 * j == k + 1 注意: ? C語言用 0表示假,非 0表示真。 ? 一個關(guān)系表達(dá)式的值不是 0就是 1, 0表示假, 1表示真。 ? 關(guān)系運(yùn)算符的優(yōu)先級 算術(shù)運(yùn)算符 高 移位運(yùn)算符 關(guān)系運(yùn)算符 amp。、 |、 ^ 賦值運(yùn)算符 低 例如: c a + b 等價于: a b != c 等價于: a == b c 等價于: a = b c 等價于: c (a + b) (a b) != c a == (b c) a = (b c) 已知: a = 1。 b = 2。 c = 3。 問: d = a != c == a b c。的值? 答: d 的值為 1。 等價于: d = ((a != c) == ((a b) c))。 例: int a = 3, b = 2, c = 1, d, f。 a b (a b) == c b + c a d = a b f = a b c //表達(dá)式值 1 //表達(dá)式值 1 //表達(dá)式值 0 //d = 1 //f = (( ab)c),f=0 ? 關(guān)系運(yùn)算注意: 例 若 a = 0。 b = 。 x = 。 則 a = x = b的值為 0 例 5 2 7 8在 C中是 允許的,值為 0 例 int i = 1, j = 7, a。 a = i + (j % 4 != 0)。 則 a = 2 例 ‘ a‘0 結(jié)果為 ‘ A‘100 結(jié)果為 1 0 例 應(yīng)避免對 實(shí)數(shù) 作相等或不等的判斷 如 *== 結(jié)果為 可改寫為: fabs(*)1e6 0 為什么 ? 答:實(shí)數(shù)在計(jì)算機(jī)中存儲存在精度損耗,因此沒有絕對的相等! ? 邏輯運(yùn)算符 邏輯運(yùn)算符 含 義 結(jié) 合 性 優(yōu)先級關(guān)系 ! 單目運(yùn)算符,邏輯非,表示相反 右結(jié)合性 高 低 amp。amp。 (兩個 amp。之間沒有空格) 雙目運(yùn)算符,邏輯與,表示并且 左結(jié)合性 || (兩個 |之間沒有空格) 雙目運(yùn)算符,邏輯或,表示或者 A B !A !B A amp。amp。 B A || B 假 假 1 1 0 0 假 真 1 0 0 1 真 假 0 1 0 1 真 真 0 0 1 1 ? 邏輯運(yùn)算真值表 !、 ~、 ++、 、 sizeof 高 算術(shù)運(yùn)算符 移位運(yùn)算符 關(guān)系運(yùn)算符 amp。、 |、 ^ amp。amp。、 || 賦值運(yùn)算符 低 例如: a = x amp。amp。 x = b 等價于: a b amp。amp。 x y 等價于: a == b || x == y 等價于: !a || a b 等價于: !a b 等價于: c = a || b 等價于: a | 7 amp。amp。 b amp。 8 等價于: a 2 amp。amp。 b 1 等價于: 2. 邏輯運(yùn)算符和邏輯表達(dá)式 ? 邏輯表達(dá)式 用邏輯運(yùn)算符連接起來的式子稱為 邏輯表達(dá)式 。 邏輯表達(dá)式的一般形式為: 表達(dá)式 邏輯運(yùn)算符 表達(dá)式 例: a b amp。amp。 b c、 x 10 || x !x amp。amp。 !y ? 邏輯運(yùn)算符的優(yōu)先級 (a = x) amp。amp。 (x = b) (a b) amp。amp。 (x y) (a == b) || (x == y) (!a) || (a b) (!a) b c = (a || b) (a | 7) amp。amp。 (b amp。 8) (a 2) amp。amp。 (b 1) 已知: a = 4。 b = 5。 問: c = b 3 amp。amp。 2 || 8 b !a。的值? 答: c 的值為 1。 等價于: c = (((b 3) amp。amp。 2) || (8 (b – (!a))))。 ? 邏輯運(yùn)算注意: 邏輯表達(dá)式求解時,并非所有的邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個邏輯運(yùn)算符才能求出表達(dá)式的解時,才執(zhí)行該運(yùn)算符。 例 a amp。amp。 b amp。amp。 c /*只在 a為真時,才判別 b的值; */ 只在 a、 b都為真時,才判別 c的值 例 a || b || c /*只在 a為假時,才判別 b的值; 只在 a、 b都為假時,才判別 c的值 */ 例 a = 1。 b = 2。 c = 3。 d = 4。 m = 1。 n = 1。 (m = a b) amp。amp。 (n = c d) //結(jié)果: m = 0, n = 1 因此 amp。amp。右邊的運(yùn)算根本沒有執(zhí)行,所以 n的值沒有改變 例 int x,m=4,n=3,a=2,b=1。 x=(m=ab)||(n=ab)。 結(jié)果為 :m的值為 1,x的值為 1,n的值為 3 2. 11條件運(yùn)算符與表達(dá)式 expr1 取 expr2值 取 expr3值 非 0 =0 ? 條件運(yùn)算符可嵌套 如 x 0 ? 1 : (x 0 ? 1 : 0) ? 一般形式(唯一三目運(yùn)算): ? expr1 ? expr2 : expr3 ? 執(zhí)行過程 ? 功能:相當(dāng)于條件語句,但不能取代一般 if語句 例 求 a+|b| printf(“a+|b|=%d\n”,b0?a+b:ab)。 ? 結(jié)合方向: 自右向左 ? expr expr expr3類型可不同,表達(dá)式值取較高的類型 例 x??a‘:?b‘ //x=0,表達(dá)式值為‘ b‘。 x≠0,表達(dá)式值為‘ a‘ xy?1: //xy ,值為 。 xy ,值為 例 if (ab) printf(“%d”,a)。 else printf(“%d”,b)。 printf(“%d”,ab?a:b)。 運(yùn)算符總結(jié): ? 總體上講,同級運(yùn)算的結(jié)合性從左到右 ?單目運(yùn)算符都是同等優(yōu)先級的,具有右結(jié)合性,并且優(yōu)先級比雙目運(yùn)算符和三目運(yùn)算符都高。 ? 三目運(yùn)算符的優(yōu)先級比雙目運(yùn)算符要低,但高于賦值運(yùn)算符和逗號運(yùn)算符。 ? 逗號運(yùn)算符的優(yōu)先級最低,其次是賦值運(yùn)算符。 ? 只有單目運(yùn)算符、賦值運(yùn)算符和條件運(yùn)算符具有右結(jié)合性,其它運(yùn)算符都是左結(jié)合性。 ? 雙目運(yùn)算符中,算術(shù)運(yùn)算符的優(yōu)先級最高,邏輯運(yùn)算符的優(yōu)先級最低。 單目運(yùn)算符 高 算術(shù)運(yùn)算符 移位運(yùn)算符 關(guān)系運(yùn)算符 位運(yùn)算符 邏輯運(yùn)算符 條件運(yùn)算符 賦值運(yùn)算符 逗號運(yùn)算符 低 到現(xiàn)在為止,我們已經(jīng)學(xué)習(xí)了 30多個運(yùn)算符。掌握它們的優(yōu)先級關(guān)系特別重要。優(yōu)先級的記憶規(guī)則: