
python運算子順序 在 コバにゃんチャンネル Youtube 的最讚貼文

Search
Python 程式設計# 運算子 優先 順序 # Python 訂閱學習Youtubehttps://www.youtube.com/c/wuchaiyen?sub_confirmation=1成為這個頻道的會員並獲得 ... ... <看更多>
運算 優先順序¶ ; <<,>>, 移位 ; ,-, 加法與減法 ; *,/,%, 乘法、除法與取餘 ; x,-x, 正負號. ... <看更多>
#1. Python教學-控制結構(4)運算子優先順序Operator precedence
運算子 優先順序(operator precedence)在包含Python 及其他的程式語言都是很重要的概念。它是數學運算順序(如先乘除後加減)概念的延伸,並包含其的 ...
#2. Python 101 基礎教學(4) - 運算符號優先順序 - June Monster
Python 的陳述式因為包含多種可能的運算符號,所以要制定一定的優先順序,才能避免衝突,讓程式在執行的時候有規則可循。 優先順序為上至下. 運算符號, 表示. (), 括號.
#3. Python控制結構課程第四課-運算子優先順序一覽 - AI方程式
運算子 優先順序(operator precedence)在包含Python 及其他的程式語言都是很重要的概念。它是數學運算順序(如先乘除後加減)概念的延伸,並包含其的 ...
最多人想學的Python有新文章啦!! 這篇要和大家分享運算子優先順序Python教學中的運算子優先順序(operator precedence)在包含Python 以及其他的程式 ...
#5. Python 中的運算順序
這裡, P 表示括號, E 表示指數, MD 表示乘法和除法,因為兩者具有相同的優先順序, AS 表示加法和減法。 當運算子具有相同的優先順序時,執行第一個 ...
#6. Python控制結構小學堂:運算子優先順序 - Coding幫幫忙
運算子 優先順序(operator precedence)在包含Python 及其他的程式語言都是很重要的概念。它是數學運算順序(如先乘除後加減)概念的延伸,並包含其的他 ...
#7. Python程式設計#Python運算子#運算子優先順序 ... - YouTube
Python 程式設計# 運算子 優先 順序 # Python 訂閱學習Youtubehttps://www.youtube.com/c/wuchaiyen?sub_confirmation=1成為這個頻道的會員並獲得 ...
#8. 運算子、運算式- Python
瞭解運算子的優先順序:算術運算子>比較運算子>邏輯運算子。 學會變數搭配運算子構成運算式的應用. 學會連接字串和字元的運算子應用。
對於大於、小於、等於這類的比較,Python 提供了>、>=、<、<=、==、!= 等運算子。 比較運算比較運算有個很Python 的.
#10. Python运算符优先级和结合性一览表 - C语言中文网
这样看起来就一目了然了,不容易引起误解。 当然,我们也可以使用 ( ) 改变程序的执行顺序,比如:. 4+(4<<2). 则 ...
#11. Python運算子優先順序範例 - tw511教學網
Python運算子 優先順序範例 ; 3, * / % //, 乘法,除法,模數和地板除 ; 4, + - ; 5, >> <<, 向右和向左位移 ; 6, &, 按位元與.
#12. 技巧6:各種運算子(下)(字幕、襯樂、練習)
昨天認識了Python三種運算子中,分別是算術運算子、比較運算子以及邏輯運算子,你 ... 再來還要講講這麼多運算子它們的優先順序,如果在同一個運算式裡遇到了,誰可以 ...
#13. PythonBasic/03. Python 運算子.ipynb at master - GitHub
運算 優先順序¶ ; <<,>>, 移位 ; ,-, 加法與減法 ; *,/,%, 乘法、除法與取餘 ; x,-x, 正負號.
#14. 小吳哥教學中心- Python運算子結合優先順序 - Facebook
Python運算子 結合優先順序. ... 小吳哥教學中心 · July 26, 2021 at 10:42 AM ·. Python運算子結合優先順序. No photo description available. Recent Post by Page.
#15. 運算子優先序- JavaScript - MDN Web Docs
優先性. Precedence 運算子名稱. Operator type 相依性. Associativity 運算子. Indivi... 19 Grouping (en‑US) 無 ( … ) 18 Member Access (en‑US) 從左至右 … . … 18 Computed Member Access (en‑US) 從左至右 …
#16. Python 是一個功能強大
本章將學習如何以運算子和運算元組合成運算式,以及運算時運. 算子的優先順序。 6.1 ▷ 運算子、運算元與運算式. 在動手撰寫程式之前,首先要認識「運算子 ...
#17. 不間斷Python 挑戰Day 3 - 基本數學運算|方格子vocus
Python 的四則運算透過「+」(加)、「-」(減)、「*」(乘)、「/」(除)等算術運算子,或是「+=」、「-=」、「*=」、「/=」等指派運算子來達成。
#18. 運算子優先順序(Transact-SQL)
本文內容. 另請參閱. 適用于: SQL Server Azure SQL 資料庫 · Azure SQL 受控執行個體. 當複雜運算式有多個運算子時,運算子優先順序會決定作業的 ...
#19. Python(011)運算子的優先順序 - 愛學習- 痞客邦
Python (011)運算子的優先順序 · 1. 次方為優先計算 · 2. 乘、除、餘數、整數 · 3. 加、減.
#20. Python运算符优先级 - JSON在线
Python运算 符优先级,是描述在计算机运算计算表达式时执行运算的先后顺序。 先执行具有较高优先级的运算,然后执行较低优先级的运算。 例如,我们常说的先执行相乘和 ...
#21. 【Python筆記】數字與運算子(Python numbers and Operator)
Python 也能像計算機一樣進行四則運算,運算的順序同數學原則,運算順序為( ) → ** → * / → + - ,那麼接下來介紹運算子(Operator)。
#22. 6. 表达式— Python 3.10.11 說明文件
当对下述某个算术运算符的描述中使用了“数值参数被转换为普通类型”这样的 ... 当提供由逗号分隔的一系列表达式时,其元素会从左至右被求值并按此顺序放入列表对象。
#23. Python 入門指南- 單元5 - 運算式與陳述 - 程式語言教學誌
本篇文章介紹Python 的各種運算子組成的運算式,包括正負號、邏輯運算子、算術運算子、相等 ... 的優先順序在= 之前,所以a != b 會先被計算,結果才會指派到f 之中。
#24. 運算子 - HackMD
運算子 根據[Python](https://hackmd.io/@defu/python)所提到的,Python屬於程式語言,而不論任何程式語言均具備有運算子的功能, ... 運算子, 功能, 範例, 優先順序 ...
#25. python多个and or运算顺序 - CSDN博客
在不添加括号的情况下,多个and or 进行逻辑操作时,and运算符的优先级大于or输入:1 and 0 or 1 and 0运算顺序:a. 先运算所有的and运算,and运算 ...
#26. 2.1. 比較與邏輯運算子· ICE101-Basic Python programming ...
「邏輯運算子」又被稱做「布林運算子」,可以用來判斷布林值之間的關係,真值表被用 ... 比較長的邏輯表示方式,這個時候會需要使用括號「( )」來區分邏輯運算的順序。
#27. Python 3.x CH3 運算元與運算子士林高商施柏宏教師
運算子 意義. 優先順序. 結合律. 範例. 範例結果. **. 次方. 1. 由右至左. 7**2. 49. +/-. 正負號. 2. 由右至左. +5. +5. *. 乘法. 3. 由左至右. 12*3.
#28. Python运算符优先级顺序 - 嗨客网
Python运算 符优先级,Python运算符优先级教程即所谓运算符的优先级,指的是在含有多个运算符的式子中,到底应该先计算哪一个,后计算哪一个。
#29. Python串列(list) 基礎與23個常用操作 - 自學成功道
使用* 運算子,重複多個串列; 使用+ 運算子,將串列相加 ... Python串列像是經過排序的清單,有順序性,所以可以依照各個項目存在的位置,提取所需要 ...
#30. Python 運算子 - ITREAD01.COM - 程式入門教學
運算子 優先順序. 接下來讓我們一個個來學習Python的運算子。 Python算術運算子. 以下假設變數: a=10 ...
#31. 運算子優先權 - 他山教程
從Python 文件:. 下表總結了Python 中的運算子優先順序,從最低優先順序(最小繫結)到最高優先順序(大多數 ...
#32. Python 运算符 - 菜鸟教程
Python 语言支持以下类型的运算符: 算术运算符比较(关系)运算符赋值运算符逻辑运算符位运算符成员运算 ... Python算术运算符以下假设变量: a=10,b=20: 运算符描述实例.
#33. Python 中的运算顺序 - 迹忆客
括号具有最高优先级,如前面的示例所示。因此,它们用于此类复杂表达式中,以相应地对子表达式进行分组,以控制首先计算哪些运算符。
#34. 家豪教學網C/C++ 基礎課程其他運算子
運算子 優先序. 優先順序, 運算子, 敘述, 結合性. 1, ()[]{}, 括號類, 左結合(左而右). 2, **, 指數(次方), 右結合(右而左). 3, +、-、~, 正、負、補數, 左結合(左而右).
#35. 決策運算
下表是Python 的邏輯運算子,C/C++ 用符. 號『! ,&&,||』表示,Python 直接用單字表示,如下表,這樣反. 而比較好記。 運算子. 定義. 優先順序. 結合律 not. 邏輯否定運算.
#36. python控制运算的优先顺序括号 - 稀土掘金
在Python 中,运算的优先顺序是由操作符的优先级决定的,同时也可以用括号来改变优先级。 常见的操作符优先级从高到低依次是:. 括号: () 、 [] 、 {}; 幂运算: ...
#37. CHAPTER 02 認識變數與基本數學運算
本章將從基本數學運算開始,一步一步講解變數的使用與命名,接著介紹Python ... 乘法、除法、求餘數(%)、求整數(//),彼此依照出現順序運算。 ... 23 指派運算子.
#38. Q : Python-RUN-2
Q1: Python總共有7個算術運算子. 指定運算子(=)的優先順序最低,因此會先完成等號右邊的算術運算式,最 ... Python語言是利用內縮來決定哪些程式碼是屬於同一個區塊。
#39. 益大資訊~輕鬆學會運算思維與Python 程式設計ISBN ... - 蝦皮購物
... 欄寬設定本章重點整理本章課後習題CHAPTER 03 運算式與運算子3-1 算術運算子3-2 指定運算子3-3 關係運算子3-4 邏輯運算子3-5 運算子優先順序3-6 本章綜合範例–快速 ...
#40. 一天學會Python–從零開始徹底精通Python 程式語言,親手乒乓 ...
Python 程式語言教學投影片https://youtu.be/IcIqAEfWjc8[/e … 閱讀全文一天學會Python– ... (00:00:00)Python運算子優先順序運算子結合優先順序 (00:09:05)運算子優先 ...
#41. Python
Python. 日常生活中充滿選擇的事項,如你要從台北到桃園,可選擇搭客 ... 以標示執行順序。 ... 需注意的是,關係運算子是用兩個等號(==)來表示,而不是單一等號.
#42. Python 基礎教學
運算功能. 進行各種計算功能的運算符號,稱為運算子。舉例4 + 5 中,4 和5 被稱為運算元(Operand)或操作數,"+" 稱為運算子。 Python語言有以下類型的運算子:.
#43. Python运算符优先级和结合性一览表 - 知乎专栏
不要把一个表达式写得过于复杂,如果一个表达式过于复杂,可以尝试把它拆分来书写。 不要过多地依赖运算符的优先级来控制表达式的执行顺序,这样可读性太 ...
#44. Python -- 運算子 - 國立高雄科技大學第一校區
B1為True,傳回False。 not False. 本體運算子. is, is not, == try (i=5, i==f, i is ...
#45. 台灣機器學習有限公司 - IT Technology
Python 機器學習-親手TensorFlow實作手寫辨識觀看次數:1. playlist_add ... C++程式語言第十章10-1 Friend函數,const修飾子,多載化運算子觀看次數:1. playlist_add.
#46. b042. 後序運算式
平常我們使用的運算式如A+B 為中序運算式,即運算子在兩運算元中間。 可是這種表示法必須用括弧來表示運算順序,電腦不易解析。因此,現代電腦大多利用 ...
#47. Python运算符执行顺序对照表 - 腾讯云- Tencent
优先级 运算符 描述 1 lambda Lambda表达式 2 or 布尔“或” 3 and 布尔“与”
#48. 綜合演練- 選擇題解答
下列何者運算子的優先順序最高? (A) -(負) (B) * (C) and (D) +=. Ch03. ( A ) 1. Python 語言以下列那一個符號及縮排來表示程式區塊? (A)「:」 (B)「!
#49. 建立指令碼運算子 - SAP Help Portal
插入指令碼運算子以使用Python 指令碼轉換收到的資料,並將結構資料輸出至下一個運算 ... 與輸出的指定表格必須有相同欄名稱、類型和順序,否則資料流程執行將失敗。
#50. 一邊解題一邊學: Python初學者的練習本| 誠品線上
的確,整個程式的設計必須仔細斟酌,但是本書說明的基本語法最好一眼就能掌握。如果要逐一思考「哪個是變數、哪個是函數、方法」、「表達式內的運算子處理順序」、「每行 ...
#51. Python 基礎:認識關係運算子與邏輯運算子 - 不及格研究室
False; True; True. 如果條件沒有額外括號的話, 跟先乘除、後加減一樣, 邏輯運算子也有優先順序的 ...
#52. Python亂談
第十三話、運算優先順序(Operators Precedence). 我們已經學會了好幾種運算子,跟數學一樣,有時候會組合成一個式子其中包含多個運算子,此時的運算先後次序是甚麼呢?
#53. [Python教學]搞懂5個Python迴圈常見用法
2. continue:同樣的在continue指令之後的運算不會執行,但是不會中斷迴圈,而是會繼續讀取下一個元素。 在範例中我們一樣使用for-loop讀取 ...
#54. 03-d02 邏輯運算子(下) - 條件式選擇與程式碼排版| Coursera
Video created by National Taiwan University for the course "用Python 做商管程式設計(一)(Programming for Business Computing in Python (1))".
#55. Python程式語言part1
運算子 優先順序. 說明. **. 指數(最高優先順序). ~ + -. 按位翻轉, 一元加號和減號(最後兩. 個的方法名為+@ 和-@). * / % //. 乘,除,取模和取整除.
#56. a664. 四則運算- 高中生程式解題系統
... 的式子,而運算式之中,已經包含必要的左括號與右括號,與四種運算子符號:+,-,*,/。不必擔心少括號的問題,只要注意括號與四則運算的優先順序即可, ...
#57. 1ZUIPO㛇劥铃岁
因為那些程式語言偷偷先幫你轉換成同樣的類型,再開始做運算,Python 本質上是一個很 ... 千萬不要去背運算子順序!!因為運算子順序其實是根據大部分人的直覺制定的.
#58. 函式function - Python 教學 - STEAM 教育學習網
注意,執行函式時,會按照「順序」處理多個參數,例如函式參數順序如果是(x,y),執行時 ... 如果把函式的參數設定帶有args ( 一個星號 * ) 運算子的參數,則傳入的所有 ...
#59. 運算思維與Python程式設計含GLAD ICTP計算機程式能力國際 ...
1.介紹Python基礎技術與通過ICTP計算機程式能力國際認證的實用教材。2.本書介紹的內容包含ICTP計算機程式能力國際認證-核心能力(Information and ...
#60. 安全導航運算子- 維基百科
在物件導向程式設計中,安全導航運算子(safe navigation operator,也可稱作optional chaining operator、safe call ... 這避免了順序地顯式空值檢查。 ... Python編輯.
#61. 程式設計概論Programming 101 —程式數值變數的操作
各種運算的優先順序 ... 運算元(operand): 運算子所運算的值 ... 模組是一個Python檔案,如: math模組,它有一些數學常數和數學函式,需要import.
#62. Python學習之路(5)——常用運算子的優先順序及使用總結
除了加減乘除以外,還有幾種我們平時不太常見到的運算子,他們分別是:求餘(%)、求冪(**)和整除(//),示例如下:. 既然是運算,必然有優先順序問題 ...
#63. Python基本資料運算
內建資料型別, 常值, 變數, 運算子與運算式, 資料型別轉換, 使用print()函式, ... + 3 之後的值才會指定給y 當運算子擁有相同優先序時,運算子的執行順序則由結合性 ...
#64. Bit - 演算法筆記
C/C++ 的位元運算子: << 、 >> 、 & 、 | 、 ^ 、 ~ ,可以修改變數的位元。 UVa 10469 10264 ... Bit Reversal (顛倒位元順序). // 僅適用32位元無號數 ...
#65. 中考資訊科技:第九課python常見運算子列表清單,收藏備查
中考資訊科技第九課,python常見運算子知識有關說明:相關文章是連續的釋出,後續演示使用的作業系統為win10,python版本使用3.9。
#66. 比較運算子與函數參考- Amazon DynamoDB
主題 · 篩選條件和條件表達式的語法 · 進行比較 · 函數 · 邏輯評估 · 括號 · 條件的優先順序 ...
#67. C 語言:運算子優先次序和運算次序 - 傑克! 真是太神奇了! - 痞客邦
運算子 優先權(C 語言)Percedence Table 運算子Operator 說明Description 結合順序Associativity 1 ()[]
#68. [javascript]運算子優先順序和強制轉換所造成的問題 - - 點部落
在javascript 中運算子的表達方式(+-*/...etc.) 其實在javascript的引擎中+-*/ 自己本身就是一個function. 如a+b 在javascript的引擎中表達的就是
#69. python运算符的优先级顺序表 - 抖抖音
抖抖音提供python运算符的优先级顺序表的详细介绍, 在这里您可以详细查阅到python运算符的优先级顺序表的内容, 每天实时更新,最新最全的python运算符的优先级顺序表的 ...
#70. Python入門基礎系列(十)——運算符的優先級 - 每日頭條
這對於您理解Python操作符的含義至關重要。這篇文章主要介紹了Python如何判斷其操作符的運算順序,那種運算符的運算優先級更高。 例如乘法運算符比 ...
#71. 開始寫Python (一)
一個運算式組合多個運算子時,為了避免歧義,運算子有優先順序(precedence)。google搜尋「python operator precedenec」可以找到很多表格。
#72. Python运算符优先级和结合性一览表 - 51CTO博客
例如对于表达式a+b*c,Python会先计算乘法再计算加法;b*c的结果为8,a+8的结果为24, ... 运算符说明, Python运算符, 优先级, 结合性, 优先级顺序.
#73. [分享] 運算子優先順序?: 大於= 大於, - 看板C_and_CPP
C++ Primer 4/e (P.170) 中,運算子優先序(Operator Precedence) 如下表: ?: (conditional) expr ? expr : expr 右—結合性= (assignment) lvalue ...
#74. Python 程式教學- 2023
print ('Hi, ', name) 數學運算子PyGame 是一種Python 用來製作遊戲的模組, ... 碼,本篇文章整理了學習的順序導引,如果是入門學習者,只要按照順序 ...
#75. Python 程式教學- 2023 - isobel.space
print ('Hi, ', name) 數學運算子PyGame 是一種Python 用來製作遊戲的模組, ... 碼,本篇文章整理了學習的順序導引,如果是入門學習者,只要按照順序 ...
#76. Python 程式教學- 2023
print ('Hi, ', name) 數學運算子PyGame 是一種Python 用來製作遊戲的模組,它能讓 ... 的順序導引,如果是入門學習者,只要按照順序閱讀和實作,就可以輕鬆學會Python ...
#77. Python駭客密碼|加密、解密與破解實例應用(電子書)
運算子 值 2 + 2 值表示式圖 2-2 表示式是由值(如 2)和運算子(如+)所組成運算子的順序在上數學課時您可能已聽過「運算子的順序」,舉例來說,先乘除後加減。
#78. 人工智慧Python基礎課 - 用Python分析了解你的資料(電子書)
Python 運算式大部分都是二元運算式,如下所示: * 1 a d + e 4-2 運算子的優先順序 Python 運算子的優先順序決定運算式中運算子的執行順序,可以讓多運算子的運算式得到 ...
#79. 看圖學Python人工智慧程式設計 - 第 3-17 頁 - Google 圖書結果
3-6-1 運算子的優先順序 Python 運算子的優先順序決定運算式中運算子的執行順序,可以讓擁有多運算子的運算式得到相同的運算結果。優先順序(Precedence)當同一 Python ...
#80. 2023 Python 程式教學 - arabaciabla.net
print ('Hi, ', name) 數學運算子PyGame 是一種Python 用來製作遊戲的模組, ... 碼,本篇文章整理了學習的順序導引,如果是入門學習者,只要按照順序 ...
#81. 2023 Python 程式教學 - lanhaber.online
print ('Hi, ', name) 數學運算子PyGame 是一種Python 用來製作遊戲的模組,它能讓 ... 的順序導引,如果是入門學習者,只要按照順序閱讀和實作,就可以輕鬆學會Python ...
#82. Python 程式教學2023
print ('Hi, ', name) 數學運算子PyGame 是一種Python 用來製作遊戲的模組, ... 碼,本篇文章整理了學習的順序導引,如果是入門學習者,只要按照順序 ...
#83. 2023 Python 程式教學 - sikytver.net
print ('Hi, ', name) 數學運算子PyGame 是一種Python 用來製作遊戲的模組,它能讓 ... 的順序導引,如果是入門學習者,只要按照順序閱讀和實作,就可以輕鬆學會Python ...
#84. 2023 Python 程式教學- yanarss.net
print ('Hi, ', name) 數學運算子PyGame 是一種Python 用來製作遊戲的模組,它能讓 ... 的順序導引,如果是入門學習者,只要按照順序閱讀和實作,就可以輕鬆學會Python ...
#85. Python 程式教學2023 - lokmanhaber.online
print ('Hi, ', name) 數學運算子PyGame 是一種Python 用來製作遊戲的模組, ... 碼,本篇文章整理了學習的順序導引,如果是入門學習者,只要按照順序 ...
#86. 2023 Python 程式教學 - abowss.net
print ('Hi, ', name) 數學運算子PyGame 是一種Python 用來製作遊戲的模組, ... 碼,本篇文章整理了學習的順序導引,如果是入門學習者,只要按照順序 ...
#87. 关于Python的运算符及优先级顺序
关于Python的运算符及优先级顺序 ... 运算符大致的概念是通过给出的一或多个值来产生另一个表达式的运算,是一种告诉编译器执行特定的数学或逻辑操作的符号 ...
#88. C 程式語言教學- 2023
系統軟體和應用軟體則提供了電腦硬體執行指令的確實順序。 ... 下面列舉幾個使用C 的例項: 作業系統; 語言編譯器; 彙編器代數運算子用來進行日常的十 ...
#89. C 程式語言教學2023 - deeerdim.net
系統軟體和應用軟體則提供了電腦硬體執行指令的確實順序。 ... 下面列舉幾個使用C 的例項: 作業系統; 語言編譯器; 彙編器代數運算子用來進行日常的十 ...
#90. C 程式語言教學2023 - ithaber.online
系統軟體和應用軟體則提供了電腦硬體執行指令的確實順序。 ... 下面列舉幾個使用C 的例項: 作業系統; 語言編譯器; 彙編器代數運算子用來進行日常的十 ...
#91. Operator 中文- 2023
包括以下運算子: basic assignment Combinator 3 3 生產管理人員Learn ... 而且不同于内建版本,它们也不会令左操作数的求值按顺序早于右操作数。
#92. Operator 中文2023 - frhaber.online
包括以下運算子: basic assignment Combinator 3 3 生產管理人員Learn more 7 为了2022An ... 而且不同于内建版本,它们也不会令左操作数的求值按顺序早于右操作数。
#93. Operator 中文2023 - daysinal.net
包括以下運算子: basic assignment Combinator 3 3 生產管理人員Learn more 7 为了2022An ... 而且不同于内建版本,它们也不会令左操作数的求值按顺序早于右操作数。
#94. Operator 中文2023 - fyhaber.online
包括以下運算子: basic assignment Combinator 3 3 生產管理人員Learn ... 而且不同于内建版本,它们也不会令左操作数的求值按顺序早于右操作数。
#95. 資料結構書籍- 2023
第二本,《演算法圖解》 就像《演算法圖解》(程式碼使用Python 語言實現的)這本書 ... 型態與運算子Justin Lin 184 views • 74 slides 檢視鏈結串列頭端的資料.
#96. python并行运算 - 我的编程学习
Python 提供了多种进程间通信的方式,例如管道(Pipe)、队列(Queue)、共享内存(Value和Array)等。 下面是一个使用队列传递子进程返回值的示例代码:
python運算子順序 在 [分享] 運算子優先順序?: 大於= 大於, - 看板C_and_CPP 的推薦與評價
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 編譯錯誤。
不知道這樣理解對嗎?謝謝。
... <看更多>