當前位置:首頁 » 編程語言 » c語言什麼時候計算是從右向左
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言什麼時候計算是從右向左

發布時間: 2023-05-16 15:11:45

『壹』 c語言中結合性自右向左怎麼理解

C語言中結合性自右向左,簡單說就是,從表達式右邊開始執行;

1、只有同優先順序的運算符才具有結合性「自左至右」或者「自右自左」一說。

2、exp(不同優先順序運算符,依據優先順序高低進行運算):

int a = 1, b =10, c = 30;

int a = a * b + c;

因為 * 比 + 的運算符優先順序高,所以先計算a * b (先計算左邊,未考慮結合性),在計算 10 + c,結果是 a = 300

3、c++標准對子表達式進行求值的次序沒有做出規定,由各個c++編譯器廠商自己決定(參見Bjarne Stroustrup所著的C++程序設計語言)。因此,開發人員不要編寫依賴子表達式執行次序的代碼,因為為了實現同樣的功能,完全可以採用更為清晰的代碼。

例如,語句int c=(a++)+(a++)+(a++);中給c賦值的表達式(a++)+(a++)+(a++)的求值。編寫的目的是為了提高效率。

4、如果確實想鑽研,那麼根據Bjarne Stroustrup所說的「子表達式求值次序」,枚舉各種可能,就可以理解所有不同結果的編譯器行為。例如,上述語句int d=(++b)+(++b)+(++b);可以概念上表示為:int d=E1+E2+E3;(其中,E1,E2,E3是+運算符的同層次表達式,(E1+E2)和E3是+運算符的同層次表達式),其它同層次表達式可以同理)則其計算次序可以是:

1)E1(此時b=2)=>E2(此時b=3)=>E1+E2=b+b=6放入中間變數(此時b=3)=>E3

(此時b=4)=>d=10 對應VC的結果

2)E1(此時b=2)=>E2(此時b=3)=>E3(此時b=4)=>E1+E2=b+b放入中間變數(此時b=4)=>d=12 對應BC的結果;

『貳』 C語言中哪些運算是由左向右結合哪些是右向左結合請詳細說明並解釋下下面的題

x=1,y=x+3/2的值是? 答案為:2
先計算3/2,由於是整形計算,結果為1(整型數據);而後,x+1,因為x為浮點數據,所以計算結果結果為2(浮點型數據)。

優先順序 運算符 結合性
(最高) () [] -> . 自左向右
! ~ ++ -- + - * & sizeof 自右向左
* / % 自左向右
+ - 自左向右
<< >> 自左向右
< <= > >= 自左向右
== != 自左向右
& 自左向右
^ 自左向右
| 自左向右
&& 自左向右
|| 自左向右
?: 自右向左
= += -= *= /= %= &= ^= |= <<= >>= 自右向左
(最低) , 自左向右

『叄』 c語言printf函數運算順序為什麼從右到左

不是printf函數運算順序為什麼從右到左,而是類似的所有函數,包括算定義函數的參數計算都是從右至左。函數數有多個參數時計算總得有個順序吧?不是從左至右,就是從右至左,抑或從中間向兩邊;一句話選定一個順序後就「大家都這么辦」,總不能有些函數從左至右,有些函數從右至左吧,那編譯器就太難做了。當初選擇從右至左肯定是這樣有好多方便之處,比如printf中的參數表,由於C是基於棧操作的,棧又是後進先出的,從右至左計算壓棧,然後按彈出順序輸出到屏幕上剛好順應了大多數文本從左至右的習慣,很是方便;若從左至右計算壓棧,那也不是說不可以,但處理就沒有這么方便了。個人管見,供參考。

『肆』 c語言中條件運算 結合方向 從右到左 什麼意思

在標准C語言的文檔里,對操作符的結合性並沒有作出非常清楚的解釋。一個滿分的回答是:它是仲裁者,在幾個操作符具有相同的優先順序時決定先執行哪一個。 每個操作符擁有某一級別的優先順序,同時也擁有左結合性或右結合性。優先順序決定一個不含括弧的表達式中操作數之間的「緊密」程度。例如,在表達式a*b+c中,乘法運算的優先順序高於加法運算符的優先順序,所以先執行乘法a*b,而不是加法b+c。 但是,許多操作符的優先順序都是相同的。這時,操作符的結合性就開始發揮作用了。在表達式中如果有幾個優先順序相同的操作符,結合性就起仲裁的作用,由它決定哪個操作符先執行。像下面這個表達式: int a,b=1,c=2; a=b=c; 我們發現,這個表達式只有賦值符,這樣優秀級就無法幫助我們決定哪個操作先執行,是先執行b=c呢?還是先執行a=b。如果按前者,a=結果為2,如果按後者,a的結果為1。 所有的賦值符(包括復合賦值)都具有右結合性,就是說在表達式中最右邊的操作最先執行,然後從右到左依次執行。這樣,c先賦值給b,然後b在賦值給a,最終a的值是2.類似地,具有左結合性的操作符(如位操作符「&」和「|」)則是從左至右依次執行。

『伍』 c語言中運算符 : 的自右至左結合方向怎麼體現

賦值運算符是自右向左結合的。
以如下代碼為例:
int
a
=
1,b=2,c=3;
a=b=c;
printf("%d,%d,%d\n",
a,b,c);
如果賦碧塌值運算為衡散自左向右,那麼執行順序為
a
=
b
=
2;
b
=
c
=
3;
結果a
=
2,
b=3,
c
=
3。
將輸出2,3,3
如果賦值運算為自右向左,那麼執行順序為
b
=
c
=
3;
a
=
b
=
3;
結果a
=
3,
b=3,
c
=
3。
將輸出3,3,3
通過實際運行,結果為3,3,3。說明結合方向悔攔圓是自右向左的。

『陸』 C語言運算的時候到底是從左往右還是從右往左算啊

相同優先順序從左到右,否則先算高優先順序
比如5+6*7是先算6*7再算5+42
5+6+7就是先算5+6再算11+7

『柒』 C語言中,什麼情況下從左向右運算什麼情況下從右向左運算是不是還有左右順序的讀取問題菜鳥!菜鳥!

這個要看運算符的優先順序了,在同級的情況下,雙目運算符都是左結合(從左向左運算),三目運算符都是又結合(從右向左運算);不同級情況下,先算級別高的。

『捌』 c語言中逗號運算符是從左向右算,還是從右向左算啊

int a ;
a = 2 * 3, 4 * 5;

首先計算2*3,結果是6
接著計算a = 6(因=優先順序大於,)
接下來計算4*5,結果是20

20是整個逗號表達式的值

-------------------------
由左向右運行,最後的表達式的值是整個逗號表達式的值

『玖』 c語言中,運算順序好像沒有規定是左到右還是右到左吧,12/3×2這個不同順序不同結婚,怎麼辦

沒有統一的規定
但不同運算符是有計算順序的
比如 加減乘除 就是從左到右
賦值 是從右到左
比如你這個 除法和乘法優先順序相同,順序為從左到右 於是就是
12/3*2
=4*2
=8

『拾』 c語言中運算符的結合方向什麼時候從左至右,什麼時候從右至左

左結合性:自左至右。

右結合性:自右至左。

一個運算量兩側的運算符優先順序相同時,按運算符的結合性所規定的結合方向處理。C語言中各運算符的結合性分為兩種,即左結合性和右結合性。

如,算術運算符的結合性是自左至右,即先左後右。如有表達式x-y+z則y應先與「-」號結合,執行x-y運算,然後再執行+z的運算。

而最典型的右結合性運算符是賦值運算符,如x=y=z,由於「=」的右結合性,應先執行y=z,再執行x=(y=z)運算。



(10)c語言什麼時候計算是從右向左擴展閱讀

C語言中的運算符

(1)算術運算符(+,-,*,/,%,++,--)。

(2) 關系運算符(<, >, <=, >=, ==, ![KG-*8]=) 。

(3) 邏輯運算符(!, &&, ||) 。

(4) 位運算符(<<, >>, ~, |, ^, &) 。

(5)賦值運算符(=,及其雙目運算符的擴展賦值運算符)。

(6)條件運算符(?:)。

(7)逗號運算符(,)。

(8) 指針運算符(*, &) 。

(9)求位元組數運算符(sizeof)。

(10)強制類型轉換運算符((類型))。

(11) 分量運算符(·, ->) 。

(12)下標運算符([])。

(13)圓括弧運算符(())。