c語言運算符自右向左結合有哪些,c語言運算符結合性表

本文目錄一覽:

C語言中自右向左結合的有哪些?比方說:printf,條件運算符,那還有那些呢?

從右到左的運算有:見圖片,賦值,還有單目運算:

–                   負號運算符            -表達式

(類型)          強制類型轉換        (數據類型)表達式

++               自增運算符           ++變數名/變數名++

—                自減運算符              –變數名/變數名–

*                取值運算符              *指針變數

                取地址運算符        變數名

!               邏輯非運算符          !表達式

~              按位取反運算符      ~表達式

sizeof       長度運算符             sizeof(表達式)

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語言中,哪些運算符具有左結合性?哪些具有右結合性?

1級(左結合) () 圓括弧;[]下標運算符;-指向結構體成員運算符;. 結構體成員運算符。 2級(右結合) !邏輯非運算符;~按位取反運算符;++前綴增量運算符;–前綴減量運算符;+正號運算符;-負號運算符;(類型)類型轉換運算符;*指針運算符;地址運算符;sizeof長度運算符。 3級(左結合) *乘法運算符;/除法運算符;%取余運算符。 4級(左結合) +加法運算符;-減法運算符。 5級(左結合) 左移運算符;右移運算符。 6級(左結合) 、=、、=關係運算符。 7級(左結合) ==等於運算符;!=不等於運算符。 8級(左結合) 按位與運算符。 9級(左結合) ^按位異或運算符。 10級(左結合) |按位或運算符。 11級(左結合) 邏輯與運算符。 12級(左結合) ||邏輯或運算符。 13級(右結合) ? :條件運算符。 14級(右結合) =、 +=、 -=、 *=、 /=、 %=、 =、 ^=、 |=、 =、 =賦值運算符。 15級(左結合) ,逗號運算符。

編輯本段運算符優先順序與結合性

運算符的優先順序:C語言中,運算符的運算優先順序共分為15 級。1 級最高,15 級最低。 在表達式中,優先順序較高的先於優先順序較低的進行運算。而在一個運算量兩側的運算符 優先順序相同時,則按運算符的結合性所規定的結合方向處理。 運算符的結合性:C語言中各運算符的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左)。例如算術運算符的結合性是自左至右,即先左後右。如有表達式x-y+z 則y 應先與「-」號結合,執行x-y 運算,然後再執行+z 的運算。這種自左至右的結合 方向就稱為「左結合性」。而自右至左的結合方向稱為「右結合性」。最典型的右結合 性運算符是賦值運算符。如x=y=z,由於「=」的右結合性,應先執行y=z 再執行x=(y=z) 運算。C語言運算符中有不少為右結合性,應注意區別,以避免理解錯誤。 優先順序從上到下依次遞減,最上面具有最高的優先順序,逗號操作符具有最低的優先順序。 所有的優先順序中,只有三個優先順序是從右至左結合的,它們是單目運算符、條件運算符、賦值運算符。其它的都是從左至右結合。 具有最高優先順序的其實並不算是真正的運算符,它們算是一類特殊的操作。()是與函數相關,[]與數組相關,而-及.是取結構成員。 其次是單目運算符,所有的單目運算符具有相同的優先順序,因此在我認為的 真正的運算符中它們具有最高的優先順序,又由於它們都是從右至左結合的,因此*p++與*(p++)等效是毫無疑問的。 另外在C語言里,沒有前置後置之分,因為++ — 是右結合所以右側優先運算,表現為 “操作數後置優先順序比較高” 的假象,前置和後置的區分是因為運算符重載而後加入C++的 接下來是算術運算符,*、/、%的優先順序當然比+、-高了。 移位運算符緊隨其後。 其次的關係運算符中, = =要比 == !=高一個級別,不大好理解。 所有的邏輯操作符都具有不同的優先順序(單目運算符除外,!和~) 邏輯位操作符的”與”比”或”高,而”異或”則在它們之間。 跟在其後的比||高。 接下來的是條件運算符,賦值運算符及逗號運算符。 在C語言中,只有4個運算符規定了運算方向,它們是、| |、條件運算符及賦值運算符。 、| |都是先計算左邊表達式的值,當左邊表達式的值能確定整個表達式的值時,就不再計算右邊表達式的值。如 a = 0 b; 運算符的左邊位0,則右邊表達式b就不再判斷。 在條件運算符中。如a?b:c;先判斷a的值,再根據a的值對b或c之中的一個進行求值。 賦值表達式則規定先對右邊的表達式求值,因此使 a = b = c = 6;成為可能。

編輯本段運算符優先順序等級口訣及注釋

運算符優先順序等級口訣

圓方括弧、箭頭一句號, 自增自減非反負、針強地址長度, 乘除,加減,再移位, 小等大等、等等不等, 八位與,七位異,六位或,五與,四或,三疑,二賦,一真逗。 其中「,」號為一個等級分段。

運算符優先順序等級注釋

「圓方括弧、箭頭一句號」指的是第15級的運算符。其中圓方括弧很明顯「()、[]」,箭頭 指的是指向結構體成員運算符「-」,句號 指的是結構體成員運算符「.」 ; 「自增自減非反負、針強地址長度」指的是第14級的運算符。其中 非 指的是邏輯運算符「!」,反 指的是按位取反運算符「~」,負 指的是負號運算符「-」,針 指的是指針運算符「*」,強 指的是強制類型轉換運算符,地址 指的是地址運算符「」,長度 指的是長度運算符「sizeof 」; 「乘除,加減,再移位」移位指的是左移運算符「」和右移運算符「」,其中除法還包括了 取余運算符「%」; 「小等大等、等等不等」 指的是第10級到第9級的運算符:、=、和=,等等指的是等於運算符==,不等指的是不等於運算符!= 「八位與,七位異,六位或」其中 八位與 指的是第8級的 按位與 運算符「」,七位異 指的是第7級的按位異或 運算符「^」,六位或 指的是第6級的按位或運算符「|」; 「五與,四或」指的是第5級、第4級的邏輯與運算符「」和邏輯或運算符「||」; 「三疑,二賦,一真逗」指的是第3級到第1級的運算符。其中,三疑指的是條件運算符「?:」 (三有雙重含義:即指優先順序別是三,它的運算符類型也是三目,疑也取「?」之意),二賦 指的是賦值運算符=、+=、-=、*=、/=、%=、=、=、=、^=和|= ,一真逗 指的是第1級的「,」運算符,真字只是為了語句需要罷了。 由於C語言的運算符優先順序與C++的不完全一樣(主要是增加了幾個運算符),所以這個口訣不能完全實用於C++.但是應該能夠兼容,大家可以比較一下他們的區別應該就能夠很快掌握C++的優先順序的!

編輯本段運算符應用舉例

·賦值運算符:a=5; a=b=0; 第一個賦值語句把5賦給變數a;第二個賦值語句的意思是把0同時賦值給兩個變數。這是因為賦值語句是從右向左運算的,也就是說從右端開始計算,先b=0,然後a=b。 ·複合賦值運算符:a=1;a+=3; 上面第二個賦值語句等價於a=a+3;即a=4。 ·算術運算符:Area=Height*Width;num=num1+num2/num3-num4; 第一個賦值語句Height和Width相乘結果賦給變數Area;第二個賦值語句先完成num2與num3的整除運算,然後與num1相加,再減去num4,結果賦給num。運算符運算順序先算乘除再算加減。單目正和單目負最先運算。 ·邏輯運算符:a=1,b=1; a||b-1; 因為a=1為真值,所以不管b-1是不是真值,總的表達式一定為真值,這時後面的表達式就不會再計算了。 ·關係運算符:if(a0)… 如果a0,則執行if語句中的內容,否則退出。 ·條件運算符:a=(b0)?b:-b; 當b0時,a=b;當b不大於0時,a=-b;其實上面的意思就是把b的絕對值賦值給a。 ·逗號運算符:b=2,c=7,d=5;a=(++b,c–,d+3); 有三個表達式,用逗號分開,所以最終的值應該是最後一個表達式的值,也就是d+3=8,所以a=8。

在C語言中,下列運算符中結合性屬於自右向左的是? A. && B. – C. Why?

B

負號運算符的結合方向自右至左,其他的都自左至右。

原因嘛,沒什麼原因,就是這樣用的,書上也是這麼寫的,算是規定吧!

一般c語言的書最後附錄里都有介紹,你去看看

C語言邏輯運算符中有沒有自右向左的? 有的話最好舉個例子

邏輯運算符中沒有自右向左的

邏輯運算符包括! || 三種, 都是從左向右的.

?:,=,*=,/=,+=,%=,-=,=,=,=,^=,|=這些結合性都是自右向左

但是它們都不是邏輯運算

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/240273.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:21
下一篇 2024-12-12 12:21

相關推薦

  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • Python通配符有哪些

    Python通配符是一種表示字元串中模糊匹配的有效工具,用於匹配與具有特定模式匹配的字元串。Python中主要的通配符有:*,?,[]和{}。 一、星號通配符 * 在Python中…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • 條件運算符(?:)是什麼意思?

    條件運算符(?:)是JavaScript中的一種特殊的運算符,也是許多編程語言中相似語法的一部分。它可以允許我們在一個簡單、一行的語句中完成條件判斷和賦值操作,非常方便。 1.語法…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • 註冊表取證工具有哪些

    註冊表取證是數字取證的重要分支,主要是獲取計算機系統中的註冊表信息,進而分析痕迹,獲取重要證據。本文將以註冊表取證工具為中心,從多個方面進行詳細闡述。 一、註冊表取證工具概述 註冊…

    編程 2025-04-29
  • Python函數類型有哪些

    本文將從以下幾個方面詳細闡述Python函數類型。 一、內置函數 Python的內置函數是指在Python編程語言中提供的可以直接使用的函數,不需要通過導入模塊等方式引入。 部分常…

    編程 2025-04-29

發表回復

登錄後才能評論