1樓:匿名使用者
int a = 3, b = 4, c = 5, x;
x=a>b?(a>c?a:c):(b>c?b:c);
這個是求三個數的最大值的**,可以看到其過版程類權似int a = 3, b = 4, c = 5, x;
if(a>b)
else
c語言中條件運算子的結合性
2樓:匿名使用者
c語言中,逗號運算子和條件運算子還有單目運算子是有結合性的,逗號運算子左結合性條件運算子右結合性單目運算子:++、--、+(正)-(負)、*、&、!右結合性
c語言中 怎樣理解三目運算子(條件運算子)的右結合性??
3樓:
這裡涉及了c中的優先順序、結合性、求值順序。
結合性只有在相同優先順序的運算子間才起作用,比如a+b*c,+與*優先順序不同,這裡根本不用去管結合性。而a+b+c則需要進行結合性考慮了,如果+為左結合性,那麼應該理解為:(a+b)+c,如果+為右結合性,那麼應該理解為a+(b+c),當然了,我們已經知道+為左結合性了。
對於?:,在c中與它優先順序相同的只有它自己,因此只有連續的?:才會體現出它的右結合性,即a?
b:c?d:
e中,根據右結合性可知應理解為a?b:(c?
d:e)。顯然,上述問題中是體現不出這種結合性來的。
再者,還有乙個求值順序的問題,a?b:c中,c語言規定先對a求值,非零則對b求值並作為該表示式的值,為零則對c求值並作為表示式的值,並且b和c中有且僅有乙個會被求值。
對於題目中的就應該是:先進行(--a == b++)的求值,根據是否為零,會對(a++)或(b++)進行求值。說白了,也就是只有兩種可能性:
可能性1:先算(--a == b++),再算(a++);可能性2:先算(--a == b++),再算(b++)。
至於(--a == b++)中到底是先算--a 還是b++則僅從c語言這個角度是無法判別的,這是個實現問題,如果要想寫出健壯的可移植的**就應該避免這種表述。
總結一下,就是先看優先順序,次看結合性,有的求值有序,有的則無序。
4樓:匿名使用者
右結合性是運算子的一種性質。對於某乙個中綴運算子op,如果 a op b op c 等價於 a op ( b op c) 就可以說運算子具有右結合性。
對於c語言的條件運算子 a?b:c 而言,判斷優先順序和結合性的時候,中間的表示式 b 不納入判斷。
c語言的條件運算子具有這樣的性質: a ? b :
c ? d : e 等價於 a ?
b : (c ? d :
e),因此一些人說c語言的條件運算子具有右結合性
5樓:匿名使用者
實際上,一條語句中出現多次同乙個變數的自增或自減是不合規範的,因為這種寫法出現的結果是不確定的,根據編譯器而定。a++表示語句執行後a = a + 1,到底有多後?有2個a++怎麼辦?
這都是編譯器內部機制的問題。真正好的程式設計師是避免這種情況的。
c語言中條件運算子的結合性?
6樓:匿名使用者
grade=score>=90?'a':score<=70?'c':'b';
相當於:
if(score>=90)
grade='a';
else
if(score<=70)
grade='c';
else
grade='b';
a?b:c中間的?:是乙個三目運算子,而不是2個單目運算子
關於c語言條件運算子的結合順序?!!!
7樓:匿名使用者
樓主注意,結合順序不等於求值順序。條件表示式的求值順序是這樣規定的:
test ? exp1 : exp2;
條件測試部分test非零版,表示式權exp1被求值,否則表示式exp2被求值,並且保證exp1和exp2兩者之中只有乙個被求值。該運算子是右結合的值是要告訴你:後面不管跟了多大多長的表示式只要它是合法的那就整個被看作exp2。
所以a>b?a:c>d?c:d 當然相當於a > b ? a : (c>d?c:d)
別說你後面只是乙個(c>d?c:d),就算你後面是優先順序比條件運算子還高的操作符組成的表示式,它也得按照條件運算子的求值規則求值。
比如說a > b ? (x = 200) : (x+y);
加號的優先順序比條件運算子高好幾個等級,答案還不是照樣是200。這樣,我看int a = x>y?(x = 200):(y = 350); 就不要我再作解釋了吧!
8樓:匿名使用者
200結合順序是怎樣和哪個先執行是兩回事。
這裡很明顯是先比較x>y,然後選擇了執行a=x=200。
y=350沒有做,所以y最後還是50
環境:vc++6.0,devcpp4.9.9.0
9樓:匿名使用者
max = num1>num2?num1:num2是乙個三元運算子,?前的為真,則執行:前的
?前的為假,則執行:後的
因此,答案為200.
10樓:匿名使用者
200x>y是真那麼執行x=200,最後賦值給a的也就是200
這還用除錯?跟你說的結合有關係麼?
c語言中 怎樣理解三目運算子(條件運算子)的右結合性?
11樓:
這裡涉及了c中的優先順序、結合性、求值順序。
結合性只有在相同優先順序的運算子間才起作用,比如a+b*c,+與*優先順序不同,這裡根本不用去管結合性。而a+b+c則需要進行結合性考慮了,如果+為左結合性,那麼應該理解為:(a+b)+c,如果+為右結合性,那麼應該理解為a+(b+c),當然了,我們已經知道+為左結合性了。
對於?:,在c中與它優先順序相同的只有它自己,因此只有連續的?:才會體現出它的右結合性,即a?
b:c?d:
e中,根據右結合性可知應理解為a?b:(c?
d:e)。顯然,上述問題中是體現不出這種結合性來的。
再者,還有乙個求值順序的問題,a?b:c中,c語言規定先對a求值,非零則對b求值並作為該表示式的值,為零則對c求值並作為表示式的值,並且b和c中有且僅有乙個會被求值。
對於題目中的就應該是:先進行(--a == b++)的求值,根據是否為零,會對(a++)或(b++)進行求值。說白了,也就是只有兩種可能性:
可能性1:先算(--a == b++),再算(a++);可能性2:先算(--a == b++),再算(b++)。
至於(--a == b++)中到底是先算--a 還是b++則僅從c語言這個角度是無法判別的,這是個實現問題,如果要想寫出健壯的可移植的**就應該避免這種表述。
總結一下,就是先看優先順序,次看結合性,有的求值有序,有的則無序。
12樓:年定籍菱
右結合性是運算子的一種性質。對於某乙個中綴運算子op,如果aopbop
c等價於aop
(bopc)
就可以說運算子具有右結合性。
對於c語言的條件運算子
a?b:c
而言,判斷優先順序和結合性的時候,中間的表示式b不納入判斷。c語言的條件運算子具有這樣的性質:a?
b:c?
d:e等價於a?
b:(c?
d:e),因此一些人說c語言的條件運算子具有右結合性
13樓:載瑰瑋愈閒
c語言中右結合的運算子有:
c語言中怎樣理解三目運算子(條件運算子)的右結合性
14樓:匿名使用者
右結合性是運算子的一種性質。對於某乙個中綴運算子op,如果 a op b op c 等價於 a op ( b op c) 就可以說運算子具有右結合性。
對於c語言的條件運算子 a?b:c 而言,判斷優先順序和結合性的時候,中間的表示式 b 不納入判斷。
c語言的條件運算子具有這樣的性質: a ? b :
c ? d : e 等價於 a ?
b : (c ? d :
e),因此一些人說c語言的條件運算子具有右結合性
C語言運算子都有那些,c語言中有哪些運算子,各有什麼功能?
運算子的種類c語言的運算子可分為以下幾類 1.算術運算子 用於各類數內值運算。包括加 減 乘容 除 求餘 或稱模運算,自增 自減 共七種。2.關係運算子 用於比較運算。包括大於 小於 等於 大於等於 小於等於 和不等於 六種。3.邏輯運算子 用於邏輯運算。包括與 或 非 三種。4.位操作運算子 參與...
C語言中算數運算子,關係運算子,邏輯運算子的優先級別
1級優先順序 左結合 圓括號 下標運算子 指向結構體成員運算子 運算高於關係高於邏輯高於付值 去看一下教材,譚浩強 第三版 c語言的運算子的優先順序 邏輯運算子 條件運算子 賦值運算子 關係運算子 算術運算子。它們之間的優先順序 1 最高端 出現同級別運算子時的結合方向是從左往右 下面級別沒寫結合順...
c語言邏輯運算子 關係運算子 算術運算子的優先順序是怎麼樣的
邏輯運算子裡的非運算 算術運算子 關係運算子 邏輯運算子裡的與運算 邏輯運算子裡的或運算 優先順序 算數運算 關係運算 邏輯運算。按等級高到低排列 1 非運算。2 算數運算子,例如a b,進行運算。版 3 關係運算子,例如a b,進行比 權較。4 和 也就是與運算和或運算。5 賦值運算子,例如a b...