C語言 在作算術運算時會遵守先乘除後加減後加減的基本規則,而各種運算元也都有相對應的優先權(某些運算元的優先權並不符合直覺,因此對於不熟悉的運算 ... ... <看更多>
Search
Search
C語言 在作算術運算時會遵守先乘除後加減後加減的基本規則,而各種運算元也都有相對應的優先權(某些運算元的優先權並不符合直覺,因此對於不熟悉的運算 ... ... <看更多>
#1. C 語言:運算子優先次序和運算次序 - 傑克! 真是太神奇了!
運算子優先 權(C 語言)Percedence Table 運算子Operator 說明Description 結合順序Associativity 1 ()[]
在Microsoft c + + 中, /permissive- /Za 需要或編譯器選項才能啟用替代的拼寫。 C + + 運算子優先順序和關聯性資料表. 下表顯示C++ 運算子的優先順序和 ...
敘述 多載性 結合性 作用域解析(C++專有) 否 由左至右 字尾遞增 由左至右 字尾遞減 由左至右
#4. C語言運算子優先順序口訣- IT閱讀 - ITREAD01.COM
C語言運算子優先順序 口訣 ... 基本的優先順序需要記住:. 指標最優,單目運算優於雙目運算。如正負號。 先乘除(模),後加減。 先算術運算,後移位運算, ...
本篇文章是對C語言中運算子的優先順序進行了詳細的分析介紹,需要的朋友參考下每當想找哪個運算子優先順序高時,很多時候總是想找的就沒有, ...
#6. c/c++ 運算子優先順序
++ -- - (運算元) 一元運算子 右至左. * & sizeof. 3 * / % 乘/除/餘數 左至右. 4 + - 加/減 左至右. 5 << >> 左移/右移 左至右.
#7. 第五章運算式、運算子與敘述
運算子 的優先順序. 資料型態轉換 ... 一元運算子(unary operator)只需要一個運算元 ... 請避免使用a = 10; b = ++a + a * 2; 這樣子的敘述, C 語言中.
c 中關於等運算子優先順序的運算,1樓系儉佴綾你的四個式子是在同一個程式中的且是依此的吧?若是,運算如下i 與i的區別i 是先令i參加其它運算, ...
C語言運算子優先順序 優先順序運算子名稱或含義使用形式結合方向說明1 [] 陣列下標陣列名[常量表示式] 左到右-- () 圓括號(表示式)/函式名(形參表) -- ...
#10. 技術文件網[C 語言] 程式設計教學如何使用運算子(Operators)
sizeof 長得很像函式,但是 sizeof 是運算子,需注意。 運算子優先順序. 如果同一行敘述內用到多個運算子時,要如何確認那個運算子會先運算呢 ...
#11. 附錄B 運算子與優先順序- 板橋高中資訊社
附錄B 運算子與優先順序. 運算子. 運算類別. 結合性. 1. []. 下標. 記憶體處理. 左→右. (). 括號. 運算式 . 成員. 成員. –>. 指標成員. 後置++. 遞增. 後置––. 遞減.
#12. 運算子優先序- JavaScript
優先性; Precedence 運算子名稱; Operator type 相依性; Associativity 20 (en‑US) 無 19 (en‑US) 從左至右 19 (en‑US) 從左至右
#13. C語言運算子優先順序表 - w3c學習教程
C語言運算子優先順序 表,c 語言運算子優先順序具體列表運算子的優先順序語言中,運算子的運算優先順序共分為15 級。1 級最高。15級最低。在表示式中, ...
#14. C語言運算子優先順序及結合性 - w3c菜鳥教程
運算子 的結合性指同一優先順序的運算子在表示式中操作的組織方向, 即: 當一個運算物件兩側運算子的優先順序別相同時, 運算物件與運算子的結合順序, c 語言 ...
#15. C語言運算子的優先順序與結合性 - 隨意窩
C語言運算子 的優先順序與結合性優先順序結合性運算子功能低高左() [] → ‧()小括號,[]陣列右! ~ ++ -- - (type) * & sizeof&取址,*間接運算左* / %%取餘數左+ -+ ...
#16. C語言運算子優先順序問題 - 拾貝文庫網
碰到個C語言優先順序問題題目:請問X的值是多少? #include <stdio.h> int main() { int x=6; x+=x-=x*x; printf("%d\n", x); }. 答案是"-60" ,請問為什麼是-60?
#17. 【C++】運算子優先順序..()和++ - 程式人生
【C++】運算子優先順序..()和++. 2020-12-23 C++. 禮炮.. 我有一個不尋常的問題。 在MSDN庫中的Here in this table中,我們可以看到()的優先順序高於++(Pre-increment) ...
#18. C語言運算子優先順序 - tw511教學網
C語言運算子優先順序 ... 如果一個表示式中的兩個運算元具有相同的優先順序,那麼它們的結合律(associativity)決定它們的組合方式是從左到右或是從右到左 ...
#19. Lecture 3
... 複合指定運算子. 運算優先順序 ... 運算. ▫ 關係運算子. ▫ 布林運算子. ▫ 複合指定運算子. ▫ 運算的優先順序 ... 在C/C++語言中,非0為真(true),0為偽(false).
#20. c語言中的運算子優先順序高低是什麼意思
c語言 中的運算子優先順序高低是什麼意思,1樓學雅思運算子用於執行程式運算,會針對一個以上運算元專案來進行運算。例如23,其運算元是2和3,而運算子 ...
#21. 關於運算子優先順序,一個C 題目
C 題目,關於運算子優先順序,一個C 題目,關於運算子優先順序,1樓匿名使用者樓上的不對, , 的優先順序高於乘,所以是a ,a ,然後a還是5, ...
#22. 運算式和運算子
運算 式是由運算元(operand)和運算子(operator)組成的,如左下圖,. = 和+ 是運算子,sum ... C++ 的運算子可依運算元個數或運算子功能來分類: ... 運算優先權順序.
#23. C語言第三章03 運算子、運算元與運算式 - SlideShare
3. 將各運算子根據其結合順序進行運算。 4. 3-2-1 運算子優先順序3-2 運算子簡介P 3-4 <ul><li>以下是 ...
#24. C語言中的左結合性是什麼 - 第一問答網
a-b+c. 左結合性. :(a-b)+c. 右結合性:a-(b+c). 2樓:鄭邦姓念露. 意思是:從表示式右邊開始執行;只有同優先順序的運算子才具有結合性“自左至右” ...
#25. C 速查手冊- 1.6 運算子 - 程式語言教學誌
本篇文章介紹C 的運算子。 ... C 語言提供多樣、功能完整的運算子(operator) ,依運算子結合後運算的優先次序,如下列表. 運算子, 結合規則. () [] -> . 左到右.
#26. C語言運算子優先順序詳細列表與說明 - 範文筆記
C語言運算子優先順序 詳細列表與說明,所有的優先順序中,只有三個優先 ... 具有最高優先順序的其實並不算是真正的運算子,它們算是一類特殊的操作。
#27. c語言中運算子優先順序排序C語言中運算子優先順序排序 - 多學網
c語言 中運算子優先順序排序C語言中運算子優先順序排序,1樓匿名使用者c語言中運算子優先順序排序如下分為優先順序15級1圓括號下標運算子分量運算子的 ...
#28. C語言(3.1~3.6). 3.1 運算與表達式 - Medium
運算子 (operator): 也就是加減乘除運算符號,運算子之間有優先順序,一次只能執行一個,不能同時做運算. 運算元(opperand):本身具有型別和值.
#29. 請問C語言裡逗號運算子有什麼用? - 優幫助
2、注意事項:逗號運算子( , )是c語言運算子中優先順序最低的一種運算子。 二、其它用法:. 1、在for裡面的應用:. int i;int j;.
#30. C語言運算子C語言運算子是怎麼運算的 - 知識的邊界
1樓:百度文庫精選. 內容來自使用者:wjian178. e68a84e8a2ad62616964757a686964616f31333433646432 1級優先順序(左結合). () 圓括號;下標運算 ...
#31. 第4 章運算子與運算式
○4-2 運算子的優先順序 ... 在C++ 程式語言中, 大部分的敘述都是由. 運算式(Expression) 所構成, 至於運算式. 則是由一組一組的運算子(Operator) 與運.
#32. c語言中算術運算子優先順序的問題C語言中算術 ... - 貝塔百科網
c語言 中算術運算子優先順序的問題C語言中算術運算子優先順序的問題,1樓匿名使用者1級優先順序左結合圓括號下標運算子指向結構體成員運算子結構體成員 ...
#33. C語言中運算子優先順序排序
C語言 中運算子優先順序排序,1樓匿名使用者C語言中運算子優先順序排序如下分為優先順序15級1 圓括號下標運算子分量運算子的指向結構體成員運算子結構體 ...
#34. C++ 從Zero 開始
第五章基礎資料型別. 5.1 整數型態. 5.2 浮點數資料型別. 5.3 資料型別轉換. 5.4 cmath 數學函數. 第六章字串. 6.1 字串類別. 第七章陣列. 附錄B 運算子與優先順序.
#35. C語言運算子的優先順序和結合性 - M頭條
運算子 的優先順序當在一個表示式中使用多個運算子,有可能你所寫的表示式結果和你所期望的結果不一樣,那麼這個時候多半就是把運算子之間的優先順序 ...
#36. c語言運算子優先順序 - John Haydon
C語言 常用運算子的優先順序口訣是:“ 單算關邏條賦逗”; 如果加入位運算子,完整 ... 文法有一部分無法以優先順序表格表示:不允許賦值表示式作為條件運算子的右側運算 ...
#37. C++ 運算子優先順序列表 - ITW01
運算子 是告訴編譯程式執行特定算術或邏輯操作的符號c語言的運算範圍很寬,把除了控制語句和輸入輸出以外的幾乎所有的基本操作都作為運算子處理主要分 ...
#38. C語言中的結合性是怎麼回事 - 櫻桃知識
行;只有同優先順序的運算子才具有結合回性“自左至右”或者答“自右自左”一說。 exp(不同優先順序運算子,依據優先順序高低進行運算):. int a = 1, b = ...
#39. 30天C語言巔峰之路(Day14:運算子-運算子的運算優先順序)
運算子 的運算優先順序簡單來說就是一堆運算符號都擺在一起,哪些要先做,哪些要後做的意思。 上表的優先順序,越上面當然就越高囉。
#40. 7. 運算式與算術相關的運算子
C語言 是一個左值(left value)的程式語言,意即任何數學運算式都是先計算等號右邊 ... 當一個運算式中有多個運算子,且其優先順序亦相同時,所有binary的算術運算子皆為 ...
#41. c關於運算子優先順序,c中的運算子優先順序順序是什麼
c 關於運算子優先順序,c中的運算子優先順序順序是什麼,1樓因為只是在這copy條語句結束後才1假設a0則aa等同於00當然是錯的了但是現在a的值變為1補充 ...
#42. C語言中怎樣理解三目運算子條件運算子的右結合性 - 極客派
1樓:. 這裡涉及了c中的優先順序、結合性、求值順序。 結合性只有在相同優先順序的運算子間才起作用,比如a+b*c,+與*優先順序不同,這裡根本不用去管 ...
#43. 運算子和表示式 - IBM
表示式的計算順序是由所使用的運算子的優先順序來決定。 標準C 排序如下。 負(-) 單運算元; 次方; 乘法、除法及模數; 加法及減法. 如果表示 ...
#44. C和C++運算子
敘述 多載性 結合性 作用域解析(C++專有) 否 由左至右 字尾遞增 由左至右 字尾遞減 由左至右
#45. 10 下列以C 程式語言撰寫之程式執行後產生之輸出為何 ...
10 下列以C 程式語言撰寫之程式執行後產生之輸出為何?(假設運算子優先次序為[ ~ , - ] > & > ^ 。) #include main(){ int x = 5, y = 3, z = 6; printf(“% dn”, ...
#46. C語言運算子優先順序和口訣
C語言運算子優先順序 和口訣. 最後更新:2018-12-05 來源:互聯網. 上載者:User. 創建阿里雲帳戶,並獲得超過40 款產品的免費試用版;而企業帳戶則可以享有總值$1200 ...
#47. 遞增遞減運算子
4-2 運算子的優先順序; 4-3 運算式的運算規則; 4-4 綜合演練. 3. 4-1 甚麼是運算式? 在C++ 程式語言中, 大部分的敘述都是由運算式(Expression) 所構成, 至於運算式則 ...
#48. 運算式、運算子
運算子 (operator): 如+、-、*與/等運算符號。 ... 在C語言中非零的數均代表true ... 括號運算子- 優先權最高,常用來改變運算的優先. 順序。
#49. Expression Tree - 運算式 - 朝陽科技大學
這個觀念叫做 operator precedence 運算子優先順序 。 ... 諸如C, C++ 等語言, 都提供一個 operator precedence table , 其實並不是什麼新的觀念, 只是因為它的運算子 ...
#50. C程式語言 - 台灣機器學習有限公司
2-9 運算子優先權,在數學運算中先乘除後加減,運算子在運算式中有結合的優先順序,運算子有結合的優先順序,=運算子為右結合優先權高,||邏輯運算子為左結合(||左邊會先 ...
#51. c語言運算子優先權第四章 - ZPFUF
ch2變數與運算子而運算子的運算先後順序是有其規則的,這些規則定義在程式語言裡,以下是C ... PPT 檔案 · 網頁檢視C語言運算子的優先次序關係如下: 運算式表示法中序 ...
#52. 從三元運算子講講C/C++ 的運算式表達問題 - 猛哥的軌跡
下面有一張表格列出了所有的運算子C/C++ ,可以看到一共有58 種運算子有17 類. 我自己發明了一套口訣的記法,只大略記憶每個大類之間互相的優先順序.
#53. C語言程式設計: 入門與實務演練(第3版附範例光碟) | 誠品線上
C語言 程式設計: 入門與實務演練(第3版附範例光碟):,本書內容涵蓋了C語言的入門 ... 設計實務演練• 附錄B C語言運算子優先順序與關聯性彙整• 附錄C ASCII字元編碼表3.
#54. 資料型態、運算子與表示式
C /C++ 內建的常⾒見資料型態[P.52] ... [P.72]. 邏輯運算⼦子[P.73]. 運算⼦子優先順序[P.74] ... 串位元資料,我們可以規定如何對不同的型態做運算.
#55. [C語言] - 執行順序探討 - Ivan's Blog
C語言 在作算術運算時會遵守先乘除後加減後加減的基本規則,而各種運算元也都有相對應的優先權(某些運算元的優先權並不符合直覺,因此對於不熟悉的運算 ...
#56. c語言運算子優先順序C語言運算子優先順序 - Ddmba
大部分C與C++運算子也可用於其它程式設計語言如C#,Perl,具有相同的優先級,比較運算子,大家可以比較一下他們的區別應該就能夠很快掌握C++的優先順序的C語言運算子及 ...
#57. [JAVA]運算子-運算子的優先順序 - 程式開發學習之路
優先 值運算子同等順序1括號:()、[]由右至左2遞增++、遞減--、負號-、NOT!、補數~由左至右3乘*、除/、取餘數%由左至右4加+、減-由左至右5位元左移< ...
#58. C語言上的符號優先順序是怎樣的?
具有最高優先順序的其實並不算是真正的運算子,它們算是一類特殊的操作。()是與函式相關,與 ... 下面是c語言中所使用的運算子的優先順序和結合性:.
#59. c語言運算子優先順序 - ZQILZ
運算子優先 級 ·. 運算子優先權(C 語言)Percedence Table 運算子Operator 說明Description 結合順序Associativity 1 ()[] 註1: 這一條和K&R C 書上所列不同, 這是K&R C ...
#60. c 語言運算子順序 - Yrcd
運算子優先 權(C 語言)Percedence Table 運算子Operator 說明Description 結合順序Associativity 1 ()[] 註1: 這一條和K&R C 書上所列不同, 這是K&R C 原版的錯誤.
#61. C語言運算子及其優先順序匯總表口訣_C 語言 - QAVHP
C語言運算子 及其優先順序匯總表口訣圓下箭頭一頓號非凡增減富強針地長三乘除,四加減,五移位千萬別把魚忘記,它在盛飯的廚子裡小燈大燈燈燈不等爸餵魚,舅疑惑,裸雞 ...
#62. c 語言運算子順序 - UCMX
四加減,位運算子,如8/3 = 2;而兩數中有一個為小數,十五逗,PHP等,結果也會是整數)。 *註2: 精確到小數的除法(即被除數,PHP等,結合性與語意。 C 語言講義1 2 3 ...
#63. Python新手練功之控制結構篇4.運算子優先順序一覽 - 工程師的 ...
Python教學中的運算子優先順序(operator precedence)在包含Python 以及其他的程式語言都是很重要的概念。它是數學運算順序(如先乘除後加減)概念的 ...
#64. c語言運算子優先C語言運算子及其優先順序匯總表口訣 - Yjbkom
C語言運算子優先順序 同一優先順序的運算子,真讓人氣憤!現在,亦設英文版本,分享給大家,運算次序由結合方向所決定。 簡單記就是:。 > 單目運算子> ...
#65. c 運算子優先權C語言運算子優先順序口訣 - Ceubnw
C語言 常用運算子的優先順序口訣是,資料型別與運算子 · PDF 檔案Python擁有簡潔 ... 取值入門首選C 語言程式設計附範例檔〈運算子優先權實作〉檔名CH03_08.c 3-2-1認識 ...
#66. C语言运算符优先级表 - CSDN博客
优先级 名称或含义 使用形式 结合方向 1 数组下标 数组名 左到右 1 圆括号 (表达式)/函数名(形参表) 左到右 1 成员选择(对象) 对象.成员名 左到右
#67. Re: [分享] 運算子優先順序?: 大於= 大於, - 看板C_and_CPP
本文完整收錄purpose 君之原文,請詳細讀完原文再看我的回應。 ※ 引述《purpose (purpose)》之銘言: C++ Primer 4/e (P.170) 中,運算子優先 ...
#68. c語言運算子優先權 - JKE
特別是++ 及— 運算子或者是優先權14 的指定運算子, 要小心下面列出來的寫法不要用. 原因是某些動作C 語言並未規範其執行的次序. 註解[編輯] 在C和C++中對運算子的 ...
#69. c 運算子優先權 - Scupk
運算子優先 權(C 語言)Percedence Table 運算子Operator 說明Description 結合順序Associativity 1 ()[] 註1: 這一條和K&R C 書上所列不同, 這是K&R C 原版的錯誤.
#70. c 運算子優先30天C語言巔峰之路(Day14 - TFDVY
30天C語言巔峰之路(Day14:運算子-運算子的運算優先順序) 運算子的運算優先順序簡單來說就是一堆運算符號都擺在一起,哪些要先做,哪些要後做的意思。 上表的優先 ...
#71. c語言運算子優先C語言運算子優先順序口訣 - Untigw
C語言運算子優先順序 口訣基本的優先順序需要記住: 指標最優,單目運算優於雙目運算。如正負號。 先乘除(模),後加減。 先算術運算,後移位運算,最後位運算。
#72. 第四章運算子、運算式與敘述
認識運算子的優先順序 ... 運算式由運算元(operand)與運算子(operator)組成 ... c=b;. 12. 邏輯運算子(1/2). ○ 邏輯運算子與真值表:. 4.1 運算式與運算子.
#73. 英特爾CEO表示「摩爾定律依然健在」,並宣告Intel將回歸以 ...
此外,關於人工智慧、邊緣運算、雲端聯網等等,Intel 也在Innovation 大會 ... 宣布深入合作設計和開發同類首款,由產業標準程式設計語言和開放原始 ...
#74. 正则表达式– 语法 - 菜鸟教程
也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。 ... 缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。
#75. 開發者優先!英特爾重啟年度用戶大會 - HiNet生活誌
時隔5年之久,10月底英特爾舉行年度用戶大會,透過這場名為Intel Innovation 2021的線上發表會,該公司希望在此重申他們回歸以開發者為本的草根精神, ...
#76. C++ 程式執行的順序
這個例子,理想上是從ds 這個istringstream 資料來源裡,透過get() 依序讀取三個字元出來、然後透過push() 這個自己擴增的函式放進vData 裡。 理想上, ...
#77. 贪心法的应用例题- aTeacher - 博客园
第二行n 个整数,第i 个整数Ti,表示第i个人的接水时间Ti 。 输出格式. 输出文件有两行,第一行为一种平均时间最短的排队顺序;第二行为这种排列方案下 ...
#78. 儒卓力
XML的全名為Extensible Markup Language,意即為可擴展標記語言,是W3C所發展出來的網頁撰寫 ... 具有當今可耐受最大溫度範圍特性,適用於-55°C到90°C的操作溫度範圍。
#79. c 運算子優先權 - Glitchi
C 程式語言第二章2-9運算子優先權,在數學運算中先乘除後加減,運算子在運算式中有結合的優先順序,運算子有結合的優先順序,=運算子為右結合. 73 列在Microsoft c + + ...
#80. c小结_u012338729的专栏-程序员秘密
并且学好算法!3;首先,要了解语言的基本框架.还有一些基本的常量.在掌握这些后,要熟知asc码!和运算法则!C语言的运算法则不同于数学的运算法则,必须熟记!4:对于C语言!
#81. C語言程式設計概論與實踐 - 第 66 頁 - Google 圖書結果
而在一個運算量兩側的運算子優先順序相同時,則按運算子的結合性所規定的結合方向處理。 C 語言中各運算子的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左) ...
#82. C語言基礎必修課(涵蓋「APCS大學程式設計先修檢測」試題詳解)(電子書)
由 C 語言運算子優先次序中可得知**ptr1 的運算方式是採由右至左,即由內而外愈靠近指標變數的星號愈優先處理,在此若加上括號來表示(*(*ptr1)),讀者可更加瞭解其優先 ...
#83. 無師自通的C語言程式設計:附大學程式設計先修檢測(APCS)試題解析
2-5 運算子的優先順序運算式中的運算元被處理的順序,是由運算子的優先順序來決定,優 先順序在前的運算子先處理,優先順序在後的運算子後處理。常用運算子的優先順序表, ...
#84. 輕鬆玩Arduino程式設計與感測器入門(電子書)
5-4-7 運算子優先權次序 F=2+3*5-14/7,這是一個計算公式,有加減乘除四種運算子,乘除先運算 ... 這些規則定義在程式語言裡,以下是 Arduino 的 C 語言運算子優先權規定。
#85. C Primer Plus 中文版 第六版(電子書) - 第 5-39 頁 - Google 圖書結果
重要觀念 C利用運算子來達成各種不同的的功能,在使用運算元、優先順序和結合性方面, ... 當運算子如果和數值一起使用時,將會產生運算式,而且,在 C語言中的每個運算式, ...
#86. MS3452L20-24SY - Datasheet - 电子工程世界
先写个最简单的——小灯闪烁blinky建立工程,添加main.c文件,还需要添加... blackwc2006 微控制器MCU. C2000 LaunchPad图的引脚顺序,害得我好惨!
#87. 两小时搞定C语言,搞不定来打我原创 - 拜师资源博客
在实现一个函数时,可以考虑使用C库提供的函数&#x. ... 野指针; 指针运算 ... 操作符优先级; 操作符结合性; 是否控制求值顺序.
#88. JSON在线| JSON解析格式化—SO JSON在线工具
SO JSON在线提供在线JSON解析,可以把JSON内容或JSON文件进行格式化解析,按JSON层级展现。当JSON格式出现问题,采用中文的方式提醒JSON错误内容,以及标记JSON解析 ...
#89. 全国计算机等级考试一级MSOffice考试模拟题(三) - E座教育网
C.利用DCOUNT 函数统计人数时,其第二参数可任意指定一列 ... 在向Excel 单元格里输入公式,运算符有优先顺序,下列说法中错误的是().
#90. 《程序员的自我修养》读书笔记- 第十一章运行库 - ICode9
11.2.1 C语言运行库; 11.2.2 C语言标准库; 11.2.3 glibc与MSVC CRT ... 元素是argc,接着是argv和环境变量数组(压栈顺序环境变量-> argv -> argc)。
#91. 高质量的算法学习社区- Page 86673
字符串函数与标准C语言函数相似。返回值也遵守C语言的规定。 ... 数据类型的优先顺序当两个不同数据类型的表达式用运算符组合后,数据类型的优先顺序规则确定哪种数据 ...
#92. 关于理解哈希表的除法散列法(取余法)_mkelehk的专栏
《算法精解-C语言描述》上. ... 列表:用于存储键/值数据对,提供快速的检索,排序快散列码:是一个32位整数,散列算法讲对它进行取余运算,使之适应列表的大小范围。
#93. ... - 程序员大本营
我们都知道在Java语言中,new一个对象存储在堆里,我们通过栈中的引用来使用这些 ... 所以就出现了基本类型,同C++一样,Java采用了相似的做法,对于这些类型不是用new ...
#94. 电压源与电流源的等效变换对内电路也等效。A.正确B.错误 - 搜题
用C语言描述二叉树结点的结构如下:typedef char datatype; /*结点属性值的 ... st[100]; //顺序栈int top=-1; while ( t || top!=-1) /*当前处理的子树不为空或栈不为 ...
#95. 基于Python下的自动售货系统_villaaaaaaaa-程序员宝宝
输出说明:如果退币成功,按照退币原则输出退币信息。 例,退5元钱币: 命令, 输出. c, 1 yuan coin number=0 2 yuan coin ...
c語言運算子優先順序 在 Re: [分享] 運算子優先順序?: 大於= 大於, - 看板C_and_CPP 的推薦與評價
本文完整收錄 purpose 君之原文,請詳細讀完原文再看我的回應。
※ 引述《purpose (purpose)》之銘言:
C++ Primer 4/e (P.170) 中,運算子優先序 (Operator Precedence) 如下表:
?: (conditional) expr ? expr : expr 右—結合性
= (assignment) lvalue = expr 右—結合性
, (comma) expr, expr 左—結合性
####
考慮以下程式:
int main() {
1 ? puts("123"), puts("456") : puts("789"), puts("ABC");
return 0;
}
執行後:
123
456
ABC
眾所接知的是 ?: 是唯一的三元運算子,所以上面的運算中,
運算元I 必然是常數 1,
運算元II 只能是被夾在中間的運算式 puts("123"), puts("4567"),
運算元III 有兩種可能:
puts("789")
puts("789"), puts("ABC")
其中,第二種可能代表 puts(789) 先與 comma 綁定成一體,
成為 (puts("789"), puts("ABC")) 之後,才以運算元III 的身份參戰。
從結果來看,顯然 comma 運算子的優先次序,確實低於 ?: 運算子。
####
接著把 , 改成 = (賦值),再次驗證 ?: 的優先地位。
#include <stdio.h>
int main() {
int a = 1, b = 2;
1 ? a = 55 : b = 66;
printf("a = %d, b = %d", a, b);
return 0;
}
執行後 (C++ Compiler):
a = 55, b = 2
執行後 (C Compiler):
error C2106: '=' : 左運算元必須是左值 (l-value)
這裡就出現爭議了。
####
假設: 其實 ?: 優先權高於 assignment (=)
那就應該跟上次的分析過程相同,其運算元III 同樣為 b,又判斷式為 true,
最終傳回運算元II 當作 result,再以此 result 去執行最後的 = 66,
即 if (true) { (a = 55) = 66 };
又 C99 標準的規定是:
A conditional expression does not yield an lvalue.
故 55 = 66 得到一個 C2106 編譯錯誤,也是合情合理的。
又 C++03 標準的規定是:
If the second and third operands are lvalues and
have the same type, the result is of that type and is an lvalue.
故 (a = 55) 可以得到同樣是 int 型態的左值,最後再跑 = 66
理論上,最後會讓 a 變成 66,但實際結果是 55。
可見「?: 優先權高於 =」這個假設是錯的。
假設: 其實 ?: 優先權跟 assignment (=) 相等
在這個假設之下,因為 b 參與 ?: 跟 = 兩個運算子,雙方優先權相等,
所以依照右結合性,運算元III 將是 (b = 66),最終結果吻合 C++ 編譯器
跑出來的結果。
但 C 編譯器說「左運算元必須是左值」,此錯誤在此假設下,
就變成無理取鬧了。
運算元II 中「a = 55」是左值;
運算元III 中「b = 66」 亦為左值。
可見「?: 優先權等於 =」這個假設應該也是錯的。
世界上根本就沒有 "運算子優先權表",也可以說人人都是...
在 C++03 標準中,有這麼一句話:
The precedence of operators is not directly specified,
but it can be derived from the syntax.
根據 C99 / C++03 兩標準,可知
conditional-expression:
logical-or-expression
logical-or-expression ? expression : ┌ C++ 標準:assignment-expression
└ C99 標準:conditional-expression
重點就是,"assignment-運算式" 包含 "conditional-運算式",前者是後者的超集,
一個 "賦值運算式" 文法上可以替換成 "條件運算式",但反過來就不行。
所以 1 ? a = 55 : b = 66; 這個 statement 中,
可以把 b = 66 當成 "賦值運算式",最終使整個 statement,
在 C++ 文法下變成一組條件運算式。
但 C 的文法下,運算元III 要求是更狹窄的條件運算式,所以只能是 b 本身,
最終導致 a 的右值無法跟 66 進行運算的錯誤。
至於 comma 運算子,只能出現在 "賦值運算式" 的超集 "expression" 內:
expression:
assignment-expression
expression , assignment-expression
已知 "expression" 可以轉成 "賦值運算式",但是 "賦值運算式" 無法長大
變成 "expression",故 ?: 的運算元III 不會有 , 的參與。
故 1 ? puts("123"), puts("456") : puts("789"), puts("ABC"); 的結果
會是印出 123 456 ABC
除非在 "expression" 左右兩邊加上 () 就會變成 primary-expression,就可視為
單純的運算元使用了。
關於 ?: 的總結
一、不當左值用
int a = 10; int b = 20;
( 1 ? (a = 30) : (b = 40) ) = 50;
printf("a = %d, b = %d\n", a, b);
結果是 a = 50, b = 20
哪天心血來潮把這段 code 貼到 C 就編譯錯誤了;
在 C++,把 int b 改成 short int b 就又編譯錯誤了,不經改的東西很難用。
二、最好不要用
看別人程式碼,若運算式寫落落長,又沒加小括號,
這時看運算子優先權表格來判斷,還是很方便的,前提就是別碰到 ?:
根據經驗,只要 ?: 的冒號後面塞了一堆東西,就是傷眼睛的時候了。
賦值變數 = ? 數值1 : 數值2;
求絕對值函數( (a > b)? 數值1 : 數值2 );
像這樣簡單的形式,則是無妨的。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.8.132.109
感謝。
依據 C++03 在 5.17 Assignment operators 的內文中說:
The result of the assignment operation is the value stored in the
left operand after the assignment has taken place;
the result is an lvalue.
所以 (a = 55) = 66 這樣的運算,在 C++ 環境下,a 應該可以得到 66。
同時,在 C 的環境下,總是會變成 invalid lvalue in assignment 編譯錯誤。
不知道這樣理解對嗎?謝謝。
==============================================================================
請先詳細讀完上文,以下回應開始:
一點淺見與各位分享,若有錯誤請指正,並請海涵,謝謝。
先講結論:
(一)在 C99 中「=」的結果不是 lvalue,但 C++03 中卻是
lvalue,此結果導致「?:」運算子的傳回值也是不同的。
(二)若「A?B:C」中的 C 中含有「=」的時候,GCC C++
Compiler 會將整個敘述視為是 assignment-expression,而不是
範圍較小的 conditional-expression,也就是說「A?B:C」
如果是「1 ? varA = 1 : varB = 2 ;」,其中的敘述C是
「varB = 2」,而不是「varB」,但我個人認為這不符合程設邏輯
,如果有兩種選擇的話,編譯器應當選擇較小範圍感覺上較合理,
更何況「?:」運算子的順序還高過「=」運算子呢,這不知道算不
算 GCC 的 Bug?;另一方面,GCC C Compiler 則將
「1 ? varA = 1 : varB = 2 ;」中的敘述C視為「varB」,因此
整個敘述變成了先執行「?:」傳回了一個「不是lvalue」的值(注
意在 C++ 中傳回 lvalue!),然後將此值經由「=」賦予 2,然
而又因為此值不是 lvalue 因此編譯器回報錯誤(lvalue
required as left operand of assignment)。
<註>在 Wikipedia (2013/02/26) 的 Operators in C and C++ 條目提到:
----------------------------------------------------------------------
The binding of operators in C and C++ is specified (in the
corresponding Standards) by a factored language grammar, rather
than a precedence table. This creates some subtle conflicts.
For example, in C, the syntax for a conditional expression is:
logical-OR-expression ? expression : conditional-expression
while in C++ it is:
logical-OR-expression ? expression : assignment-expression
Hence, the expression:
e = a < d ? a++ : a = d
is parsed differently in the two languages.
In C, this expression is a syntax error, but many compilers
parse it as:
e = ((a < d ? a++ : a) = d)
which is a semantic error, since the result of the
conditional-expression (which might be a++) is not an lvalue.
In C++, it is parsed as:
e = (a < d ? a++ : (a = d))
which is a valid expression.
----------------------------------------------------------------------
(三)誠如 purpose 君所言,C++03 中提到「The precedence of
operators is not directly specified, but it can be derived
from the syntax.」,我想這就是造就第二點的原因。例如
「i=0, i++, i++;」,值得注意的是「++」運算子的順序高於「,」
運算子以及「=」運算子,但根據 C++03 的說法 i 應當是 2!
(四)個人認為在寫程式的時候,應當不要使用如此容易讓人疑惑,
甚至可能在某些實作環境也可能讓編譯器疑惑的語法;不才亦認為如
此作法並不會讓程式執行起來更快,因為編譯器的工作是將程式語言
敘述轉成機器碼,或許語法寫得複雜難懂,但結果卻跟簡單語法一樣
(何況現今許多編譯器都已經號稱有最佳化的功能了),所以這樣做
可說是得不償失,減少了移植性和可讀性、維護性。
(五)希望各位在討論這個主題的時候可以列出編譯的環境,因為在
各種實做環境說不定結果是不同的。
(六)以下提供兩個檔案,是我用以實驗的程式,請各位參考;註解
內是利用 GCC 4.7.2 編譯並執行的結果,並請有其他環境(MSVC,
IntelCompiler)的朋友提供執行結果,謝謝。
============ CODE START ============
/* ---------------------------------------------------------
* Description: the Usage of '?:' Operators ( C++ version )
* Author: ShaDer(ptt.cc) (aka. ShaD)
* License: General Public License version 2 (GPLv2)
* Compiler: C++ (gcc-4.7.2)
----------------------------------------------------------*/
#include <iostream>
using namespace std;
int main() {
int TelNum = +886-2-3366-3366; //-- This is NOT my number :)
cout << TelNum << "\n"; //-- output test: -5848
int a, b, c;
/*
a = 9, b = 10;
1 ? a = 99 : b = 1010;
cout << a << "\n"; // 99
cout << b << "\n"; // 10
*/
/*
a = 3, b = 4;
(1 ? a = 33 : b) = 44;
cout << a << "\n"; // 44(!!!)
cout << b << "\n"; // 4
*/
/*
a = 5, b = 6;
(1) ? (a = 55) : (b) = 66;
cout << a << "\n"; // 55
cout << b << "\n"; // 6
*/
/*
a = 7, b = 8;
1 ? (a = 77) : b = 88;
cout << a << "\n"; // 77
cout << b << "\n"; // 8
*/
/*
a = 5, b = 6, c = 1;
1 ? a = 55 : b = c++;
cout << a << "\n"; // 55
cout << b << "\n"; // 6
cout << c << "\n"; // 1
a = 5, b = 6, c = 1;
1 ? a = 55 : b = ++c;
cout << a << "\n"; // 55
cout << b << "\n"; // 6
cout << c << "\n"; // 1
*/
/*
a = 5, b = 6, c = 1;
(1 ? a = 55 : b) = (c++);
cout << a << "\n"; // 1
cout << b << "\n"; // 6
cout << c << "\n"; // 2
*/
/*
a = 5, b = 6, c = 1;
(1 ? a = 55 : b++) = (c++);
// Error: lvalue required as left operand of assignment
cout << a << "\n";
cout << b << "\n";
cout << c << "\n";
*/
/*
a = 5, b = 6, c = 1;
(1 ? a = 55 : (b++)) = (c++);
// Error: lvalue required as left operand of assignment
cout << a << "\n";
cout << b << "\n";
cout << c << "\n";
*/
return 0;
}
============= CODE END =============
============ CODE START ============
/* ---------------------------------------------------------
* Description: the Usage of '?:' Operators ( C version )
* Author: ShaDer(ptt.cc) (aka. ShaD)
* License: General Public License version 2 (GPLv2)
* Compiler: C/C++ (gcc-4.7.2)
----------------------------------------------------------*/
#include <stdio.h>
int main(void) {
int a, b;
a = 1, b = 2;
1 ? (a = 11) : (b = 22) ;
printf("a=%d, b=%d\n", a, b);
/* C: a = 11, b = 2 */
/* C++: a = 11, b = 2 */
a = 3, b = 4;
1 ? a = 33 : (b = 44) ;
printf("a=%d, b=%d\n", a, b);
/* C: a = 33, b = 4 */
/* C++: a = 33, b = 4 */
/**********************************************************************
| 敘述『(1 ? (a = 55) : b ) = 66;』不符合 C99 規則,但 C++03 則通過, |
| 原因應來自 assignment operators 在 C++03 的結果是 lvalue,但在 C99 |
| 卻不是 lvalue,此結果導致「?:」運算子的傳回值也是不同的。 |
**********************************************************************/
a = 5, b = 6;
(1 ? a = 55 : b ) = 66 ;
printf("a=%d, b=%d\n", a, b);
/* C: ERROR: lvalue required as left operand of assignment */
/* C++: a = 66, b = 6 */
a = 7, b = 8;
1 ? (a = 77) : b = 88 ;
printf("a=%d, b=%d\n", a, b);
/* C: ERROR: lvalue required as left operand of assignment */
/* C++: a = 77, b = 8 */
a = 9, b = 10;
1 ? a = 99 : b = 1010 ;
printf("a=%d, b=%d\n", a, b);
/* C: ERROR: lvalue required as left operand of assignment */
/* C++: a = 99, b = 10 */
return 0;
}
============= CODE END =============
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.251.73.137
※ 編輯: ShaDer 來自: 111.251.73.137 (02/26 11:02)
※ 編輯: ShaDer 來自: 111.251.73.137 (02/26 11:10)
※ 編輯: ShaDer 來自: 111.251.73.137 (02/26 11:15)
※ 編輯: ShaDer 來自: 111.251.73.137 (02/26 11:39)
... <看更多>