① C語言中怎樣理解三目運算符(條件運算符)的右結合性
右結合性是運算符的一種性質。對於某一個中綴運算符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語言的條件運算符具有右結合性
② 三目運算符
a=null?po.setName(""):po.setName(a);
三目運算符格式
x?y:z
x代表Boolean類型的值,先計算x的值,如果是true,則整個三木運算符的值為表達式y的值,如果是false則為z值
③ 三目運算符的結合性,究竟是從左向右還是從右向左
是從左往右的啊
這里等於
x =1 ? 1 : (剩餘部分);
先判斷x為真, 然後整體為真。 後續的都不會判斷 更不會執行了。
m還是初始值0
④ 三目運算符 的問題
A=[表達式]?a:b;
等價於
if(表達式)A=a;
else A=b;
同理,
printf(y?"\n":"no\n");
等價於
if(y)printf("\n");
else printf("no\n");
求採納為滿意回答。
⑤ 請告訴我哪裡錯了三目運算符是不是不是這樣用的為什麼執行不了
沒看懂你這個程序要表達的意思~!a=b?b:a表達式是有問題的,如果你要完成a等於b的判斷的話,應該寫為a==b。因為在C里=號為賦值號!(a==b?b:a)這個表達式其實直觀的說就是:問a等於b嗎?如果等於(成立)就返回b(緊跟在?號後面那個值),不等於(成立)就返回a(:號後面那個值)。你可以用這個三目運算符做一些簡單的選擇比較。如:
#include<iostream>
usingnamespacestd;
intmain()
{
inta=0;
intb=0;
cout<<"請輸入兩個數字:"<<endl;
cin>>a>>b;
cout<<"您輸入的最大值為:"<<(a<b?b:a)<<endl;
return0;
}
輸出結果:
因為不知道你這個程序要做點什麼,如果沒有說明白,你可以到這里看看。http://ke..com/view/1897705.htm
⑥ C語言中 怎樣理解三目運算符(條件運算符)的右結合性
這里涉及了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語言這個角度是無法判別的,這是個實現問題,如果要想寫出健壯的可移植的代碼就應該避免這種表述。
總結一下,就是先看優先順序,次看結合性,有的求值有序,有的則無序。
⑦ 三目運算符的含義是
三目運算符是指一個運算符號,這個運算符號需要三個邏輯運算量參與。本人知識有限暫時舉不出例子。但可以參考雙目運算符如「 」,單目運算符如「-」(負號)。
⑧ 三目運算符:結合性
人家本來就是條件語句,肯定是先判斷了。a=3.b=4.顯然a<b,直接就是進行 ++b了。很自然,不違背