您現在的位置是:首頁 >生活 > 2022-09-10 22:54:16 來源:
逗號運算符和賦值運算符的優先級(逗號運算符)
大家好,小霞來為大家解答以上的問題。逗號運算符和賦值運算符的優先級,逗號運算符這個很多人還不知道,現在讓我們一起來看看吧!
1、一、用法:當順序點用,結合順序是從左至右,用來順序求值,完畢之后整個表達式的值是最后一個表達式的值。
2、main(){int a,s,d;s=2;d=3;a=12+(s+2,d+4);}先算括號內的值:s+2=4,d+4=7;括號內應為(4,7),括號內取值只取最后一個,如果沒有括號則取第一個;a=12+7=19。
3、x=(y=3,(z = ++y+2) +5);是首先把y賦值為3,把y遞增為4,然后把4加上2,把結果6賦值給z,接下來把z加5最后把x賦為結果值11。
4、2、注意事項:逗號運算符(?,?)是C語言運算符中優先級最低的一種運算符。
5、二、其它用法:在for里面的應用:int i;int j;for(i=0,j=0;i<5;i++,j++)2、當分隔符:int i,j;擴展資料運算符優先級:優先級從上到下依次遞減,最上面具有最高的優先級,逗號操作符具有最低的優先級。
6、2、相同優先級中,按結合順序計算。
7、大多數運算是從左至右計算,只有三個優先級是從右至左結合的,它們是單目運算符、條件運算符、賦值運算符。
8、3、基本的優先級需要記住:指針最優,單目運算優于雙目運算。
9、如正負號。
10、先算術運算,后移位運算,最后位運算。
11、請特別注意:1 << 3 + 2 && 7等價于 (1 << (3 + 2))&&7.邏輯運算最后計算。
12、在C語言中,多個表達式可以用逗號分開,其中用逗號分開的表達式的值分別結算,但整個表達式的值是最后一個表達式的值。
13、具體用法:假設b=2,c=7,d=5, a1=(++b,c--,d+3); a2=++b,c--,d+3; 對于第一行代碼,有三個表達式,用逗號分開,所以最終的值應該是最后一個表達式的值,也就是d+3,為8,所以a1=8。
14、對于第二行代碼,那么也是有三個表達式,這時的三個表達式為a2=++b、c--、d+3,(這是因為賦值運算符比逗號運算符優先級高),所以最終表達式的值雖然為d+3,為8,但a2=3。
15、 注意:逗號運算的結合性是從左至右,完畢之后整個表達式的值是最后一個表達式的值。
16、假設:int a[],x=2,y=5; ???????(1)a[1]=(x+3,y++,x++);那么最終結果是:a[1]=2 x=3 y=6; )(2)a[2]=(x++,x+3,x+7);那么最終結果是:a[2]=10 x=4;擴展資料:逗號運算符,它將兩個及其以上的式子聯接起來叫都好表達式。
17、逗號表達式的一般形式可以擴展為:表達式1, 表達式2, 表達式3, …, 表達式n它的值為表達式n的值。
18、2、逗號運算符是所有運算符中級別最低的。
19、因此,下面兩個表達式的作用是不同的:x=(a=3, 6*3)x=a=3, 6*a逗號表達式無非是把若干個表達式“串聯”起來。
20、在許多情況下,使用逗號表達式的目的只是想分別得到各個表達式的值,而并非一定需要得到和使用整個逗號表達式的值,逗號表達式最常用于循環語句(for語句)中。
21、3、在用cout輸出一個逗號表達式的值時,要將該逗號表達式用括號括起來,如:cout<<(3*5, 43-6*5, 67/3)< 22、main(){int a,s,d;s=2;d=3;a=12+(s+2,d+4);}先算括號內的值:s+2=4,d+4=7;括號內應為(4,7),括號內取值只取最后一個,如果沒有括號則取第一個;a=12+7=19。 23、x=(y=3,(z = ++y+2) +5);是首先把y賦值為3,把y遞增為4,然后把4加上2,把結果6賦值給z,接下來把z加5最后把x賦為結果值11.2、注意事項:逗號運算符(?,?)是C語言運算符中優先級最低的一種運算符二、其它用法:在for里面的應用:int i;int j;for(i=0,j=0;i<5;i++,j++)2、當分隔符:int i,j;擴展資料:運算符優先級:優先級從上到下依次遞減,最上面具有最高的優先級,逗號操作符具有最低的優先級。 24、2、相同優先級中,按結合順序計算。 25、大多數運算是從左至右計算,只有三個優先級是從右至左結合的,它們是單目運算符、條件運算符、賦值運算符。 26、3、基本的優先級需要記住:指針最優,單目運算優于雙目運算。 27、如正負號。 28、先算術運算,后移位運算,最后位運算。 29、請特別注意:1 << 3 + 2 && 7等價于 (1 << (3 + 2))&&7.邏輯運算最后計算。 30、參考資料:百度百科運算符優先級逗號運算符( , )是C語言運算符中優先級最低的一種運算符,結合順序是從左至右,用來順序求值(最后一個逗號后面表達式的值作為整個表達式的值)。 31、下面舉例說明逗號運算符的使用方法:int?a=3,?b=5,?c;c?=?a>b,?a+b;???//?運行后c值為0,因為逗號運算符的優先級低于賦值運算符,所以先將a>b的結果(為0)賦值給c,之后運算a+b(結果不保存),所以c=0c?=?(a>b,?a+b);?//?運行后c值為8,因為括號的優先級高于賦值運算符,所以先算括號內的表達式,此時計算結果為最后一個表達式的值,即a+b的值,所以c=8C語言提供一種特殊的運算符——逗號運算符。 32、用它將兩個表達式連接起來。 33、如: 3+5,6+8稱為逗號表達式,又稱為“順序求值運算符”。 34、逗號表達式的一般形式為 表達式1,表達式2逗號表達式的求解過程是:先求解表達式1,再求解表達式2。 35、整個逗號表達式的值是表達式2的值。 36、例如,上面的逗號表達式“3+5,6+8”的值為14。 37、又如,逗號表達式 a=3*5,a*4對此表達式的求解,讀者可能會有兩種不同的理解:一種認為“3*5,a*4” 是一個逗號表達式,先求出此逗號表達式的值, 如果a的原值為3,則逗號表達式的值為12,將12賦給a, 因此最后a的值為12。 38、另一種認為:“a=3*5”是一個賦值表達式”,“a*4”是另一個表達式,二者用逗號相連,構成一個逗號表達式。 39、這兩者哪一個對呢?賦值運算符的優先級別高于逗號運算符, 因此應先求解a=3*5(也就是把“a=3*5”作為一個表達式)。 40、經計算和賦值后得到a的值為15,然后求解a*4,得60。 41、整個逗號表達式的值為60。 42、 一個逗號表達式又可以與另一個表達式組成一個新的逗號表達式,如(a=3*5,a*4),a+5 先計算出a的值等于15,再進行a*4的運算得60(但a值未變,仍為15),再進行a+5得20,即整個表達式的值為20。 43、 逗號表達式的一般形式可以擴展為 表達式1,表達式2,表達式3……表達式n它的值為表達式n的值。 44、 逗號運算符是所有運算符中級別最低的。 45、因此,下面兩個表達式的作用是不同的: ① x=(a=3,6*3) ② x=a=3,6*a 第①個是一個賦值表達式,將一個逗號表達式的值賦給x,x的值等于18。 46、第②個是逗號表達式,它包括一個賦值表達式和一個算術表達式,x的值為3。 47、 其實,逗號表達式無非是把若干個表達式“串聯”起來。 48、在許多情況下,使用逗號表達式的目的只是想分別得到各個表達式的值,而并非一定需要得到和使用整個逗號表達式的值,逗號表達式最常用于循環語句(for語句)中. 請注意并不是任何地方出現的逗號都是作為逗號運算符。 49、例如函數參數也是用逗號來間隔的。 50、如 printf("%d,%d,%d",a,b,c); 上一行中的“a,b,c”并不是一個逗號表達式,它是printf函數的3個參數,參數間用逗號間隔。 51、如果改寫為 printf("%d,%d,%d",(a,b,c),b,c);則“(a,b,c)”是一個逗號表達式,它的值等于c的值。 52、括弧內的逗號不是參數間的分隔符而是逗號運算符。 53、括弧中的內容是一個整體,作為printf函數的一個參數。 54、C語言表達能力強,其中一個重要方面就在于它的表達式類型豐富,運算符功能強,因而c使用靈活,適應性強。 55、在后面幾章中將會進一步看到這一點。 本文到此分享完畢,希望對大家有所幫助。